home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l216 / 2.ddi / XMINIGOL.PAR < prev    next >
Encoding:
Text File  |  1987-03-23  |  3.2 KB  |  111 lines

  1. /***********************************************************
  2.  
  3.      Turbo Prolog Toolbox
  4.      (C) Copyright 1987 Borland International.
  5.  
  6.         PARSING PREDICATES
  7. ***********************************************************/
  8.  
  9. PREDICATES
  10.   s_parmlist(TOKL,TOKL,PARMLIST)
  11.   s_parmlist1(TOKL,TOKL,PARMLIST)
  12.   s_exp(TOKL,TOKL,EXP)
  13.   s_exp1(TOKL,TOKL,EXP)
  14.   s_exp5(TOKL,TOKL,EXP,EXP)
  15.   s_exp2(TOKL,TOKL,EXP)
  16.   s_exp6(TOKL,TOKL,EXP,EXP)
  17.   s_exp3(TOKL,TOKL,EXP)
  18.   s_exp7(TOKL,TOKL,EXP,EXP)
  19.   s_exp4(TOKL,TOKL,EXP)
  20.   s_exp8(TOKL,TOKL,STRING,EXP)
  21.   s_sent(TOKL,TOKL,SENT)
  22.  
  23. CLAUSES
  24.   s_exp(LL1,LL0,EXP):-
  25.     s_exp1(LL1,LL0,EXP).
  26.  
  27.   s_exp1(LL1,LL0,EXP_):-
  28.     s_exp2(LL1,LL2,EXP),
  29.     s_exp5(LL2,LL0,EXP,EXP_).
  30.  
  31.   s_exp2(LL1,LL0,EXP_):-
  32.     s_exp3(LL1,LL2,EXP),
  33.     s_exp6(LL2,LL0,EXP,EXP_).
  34.  
  35.   s_exp3(LL1,LL0,EXP_):-
  36.     s_exp4(LL1,LL2,EXP),
  37.     s_exp7(LL2,LL0,EXP,EXP_).
  38.  
  39.   s_exp4([t(id(STRING),_)|LL1],LL0,EXP_):-!,
  40.     s_exp8(LL1,LL0,STRING,EXP_).
  41.   s_exp4([t(minus,_)|LL1],LL0,neg(EXP)):-!,
  42.     s_exp4(LL1,LL0,EXP).
  43.   s_exp4([t(int(INTEGER),_)|LL],LL,int(INTEGER)):-!.
  44.   s_exp4([t(real(REAL),_)|LL],LL,real(REAL)):-!.
  45.   s_exp4([t(str(STRING),_)|LL],LL,str(STRING)):-!.
  46.   s_exp4([t(char(CHAR),_)|LL],LL,char(CHAR)):-!.
  47.   s_exp4([t(lpar,_)|LL1],LL0,EXP):-!,
  48.     s_exp(LL1,LL2,EXP),
  49.     expect(t(rpar,_),LL2,LL0).
  50.   s_exp4(LL,_,_):-syntax_error(exp4,LL),fail.
  51.  
  52.   s_sent([t(if_,_)|LL1],LL0,ifthenelse(EXP,SENT,SENT1)):-
  53.     s_exp(LL1,LL2,EXP),
  54.     expect(t(then,_),LL2,LL3),
  55.     s_sent(LL3,LL4,SENT),
  56.     expect(t(else,_),LL4,LL5),
  57.     s_sent(LL5,LL0,SENT1),!.
  58.   s_sent([t(if_,_)|LL1],LL0,ifthen(EXP,SENT)):-!,
  59.     s_exp(LL1,LL2,EXP),
  60.     expect(t(then,_),LL2,LL3),
  61.     s_sent(LL3,LL0,SENT).
  62.   s_sent([t(while,_)|LL1],LL0,while(EXP,SENT)):-!,
  63.     s_exp(LL1,LL2,EXP),
  64.     expect(t(do,_),LL2,LL3),
  65.     s_sent(LL3,LL0,SENT).
  66.   s_sent([t(goto,_)|LL1],LL0,goto_line(INTEGER)):-
  67.     expect(t(int(INTEGER),_),LL1,LL0),!.
  68.   s_sent([t(goto,_)|LL1],LL0,goto_lbl(STRING)):-!,
  69.     expect(t(id(STRING),_),LL1,LL0).
  70.   s_sent(LL,_,_):-syntax_error(sent,LL),fail.
  71.  
  72.   s_exp5([t(plus,_)|LL1],LL0,EXP,EXP_):-!,
  73.     s_exp2(LL1,LL2,EXP1),
  74.     s_exp5(LL2,LL0,plus(EXP,EXP1),EXP_).
  75.   s_exp5([t(minus,_)|LL1],LL0,EXP,EXP_):-!,
  76.     s_exp2(LL1,LL2,EXP1),
  77.     s_exp5(LL2,LL0,minus(EXP,EXP1),EXP_).
  78.   s_exp5(LL,LL,EXP,EXP).
  79.  
  80.   s_exp6([t(mult,_)|LL1],LL0,EXP,EXP_):-!,
  81.     s_exp3(LL1,LL2,EXP1),
  82.     s_exp6(LL2,LL0,mult(EXP,EXP1),EXP_).
  83.   s_exp6([t(div,_)|LL1],LL0,EXP,EXP_):-!,
  84.     s_exp3(LL1,LL2,EXP1),
  85.     s_exp6(LL2,LL0,div(EXP,EXP1),EXP_).
  86.   s_exp6(LL,LL,EXP,EXP).
  87.  
  88.   s_exp7([t(power,_)|LL1],LL0,EXP,power(EXP,EXP1)):-!,
  89.     s_exp3(LL1,LL0,EXP1).
  90.   s_exp7([t(exclmmark,_)|LL],LL,EXP,factorial(EXP)):-!.
  91.   s_exp7([t(questionmark,_)|LL1],LL0,EXP,EXP_):-!,
  92.     s_exp4(LL1,LL2,EXP1),
  93.     expect(t(colon,_),LL2,LL3),
  94.     s_exp4(LL3,LL4,EXP2),
  95.     s_exp7(LL4,LL0,conditional(EXP,EXP1,EXP2),EXP_).
  96.   s_exp7(LL,LL,EXP,EXP).
  97.  
  98.   s_exp8([t(lpar,_)|LL1],LL0,STRING,call(PROCID,PARMLIST)):-!,
  99.     s_parmlist(LL1,LL2,PARMLIST),
  100.     expect(t(rpar,_),LL2,LL0),STRING=PROCID.
  101.   s_exp8(LL,LL,STRING,var(STRING)):-!.
  102.  
  103.   s_parmlist(LL1,LL0,[EXP|PARMLIST]):-
  104.     s_exp(LL1,LL2,EXP),
  105.     s_parmlist1(LL2,LL0,PARMLIST).
  106.  
  107.   s_parmlist1([t(comma,_)|LL1],LL2,PARMLIST):-!,
  108.     s_parmlist(LL1,LL2,PARMLIST).
  109.   s_parmlist1(LL,LL,[]).
  110.  
  111.