home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l216 / 1.ddi / PARSER.SCA < prev    next >
Encoding:
Text File  |  1987-03-23  |  2.5 KB  |  90 lines

  1. /*********************************************************
  2.                 
  3.                   Turbo Prolog Toolbox
  4.                   (C) 1987 Borland International.              
  5. **********************************************************/                  
  6.  
  7. DOMAINS
  8.   TOK          = userdefined_();
  9.             productions_();
  10.             domains_();
  11.             equal();
  12.             star();
  13.             plus();
  14.             separator_();
  15.             id(STRING);
  16.             arrow();
  17.             lpar();
  18.             rpar();
  19.             upper(STRING);
  20.             priorsepp();
  21.             rightassoc_();
  22.             comma();
  23.             colon();
  24.             nill
  25.  
  26.   CURSORTOK = t(TOK,CURSOR)
  27.   TOKL = CURSORTOK*
  28.  
  29.  
  30. PREDICATES
  31.   tokl(CURSOR,STRING,TOKL)
  32.   maketok(CURSOR,STRING,TOK,STRING,STRING,CURSOR)
  33.   str_tok(STRING,TOK)
  34.   skipspaces(STRING,STRING,INTEGER)
  35.   isspace(CHAR)
  36.  
  37. CLAUSES
  38.   tokl(POS,STR,[t(TOK,POS1)|TOKL]):-
  39.     skipspaces(STR,STR1,NOOFSP),
  40.     POS1=POS+NOOFSP,
  41.     fronttoken(STR1,STRTOK,STR2),!,
  42.     maketok(POS1,STRTOK,TOK,STR2,STR3,LEN1),
  43.     str_len(STRTOK,LEN),
  44.     POS2=POS1+LEN+LEN1,
  45.     tokl(POS2,STR3,TOKL).
  46.   tokl(_,_,[]).
  47.  
  48.   skipspaces(STR,STR2,NOOFSP):-
  49.     frontchar(STR,CH,STR1),isspace(CH),!,
  50.     skipspaces(STR1,STR2,N1),
  51.     NOOFSP=N1+1.
  52.   skipspaces(STR,STR,0).
  53.  
  54.   isspace(' ').
  55.   isspace('\t').
  56.   isspace('\n').
  57.  
  58.   maketok(_,",",comma,S,S,0):-!.
  59.   maketok(_,":",colon,S,S,0):-!.
  60.   maketok(_,"(",lpar,S,S,0):-!.
  61.   maketok(_,")",rpar,S,S,0):-!.
  62.   maketok(_,"*",star,S,S,0):-!.
  63.   maketok(_,"+",plus,S,S,0):-!.
  64.   maketok(_,"=",equal,S,S,0):-!.
  65.   maketok(_,"-",arrow,S1,S2,1):-frontchar(S1,'>',S2),!.
  66.   maketok(_,"-",priorsepp,S1,S2,1):-frontchar(S1,'-',S2),!.
  67.   maketok(_,"separator",separator_,S,S,0):-!.
  68.   maketok(_,"productions",productions_,S,S,0):-!.
  69.   maketok(_,"domains",domains_,S,S,0):-!.
  70.   maketok(_,"rightassoc",rightassoc_,S,S,0):-!.
  71.   maketok(_,"userdefined",userdefined_,S,S,0):-!.
  72.   maketok(_,STR,upper(STR),S,S,0):-frontchar(STR,CH,_),CH>='A',CH<='Z',!.
  73.   maketok(_,STRING,id(STRING),S,S,0):-isname(STRING),!.
  74.   maketok(CURSOR,_,_,_,_,_):-scan_error("Ilegal token",CURSOR),fail.
  75.  
  76.   str_tok(",",comma).
  77.   str_tok("(",lpar).
  78.   str_tok(")",rpar).
  79.   str_tok("*",star).
  80.   str_tok("+",plus).
  81.   str_tok("=",equal).
  82.   str_tok("->",arrow).
  83.   str_tok("--",priorsepp).
  84.   str_tok("separator",separator_).
  85.   str_tok("productions",productions_).
  86.   str_tok("rigthassoc",rightassoc_).
  87.   str_tok("userdefined",userdefined_).
  88.   str_tok(STR,upper("")):-free(STR),!,STR="production name".
  89.   str_tok(STR,id("")):-free(STR),!,STR="identifier".
  90.