home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************
-
- Turbo Prolog Toolbox
- (C) Copyright 1987 Borland International.
-
- PARSING PREDICATES
- ***********************************************************/
-
- PREDICATES
- s_parmlist(TOKL,TOKL,PARMLIST)
- s_parmlist1(TOKL,TOKL,PARMLIST)
- s_exp(TOKL,TOKL,EXP)
- s_exp1(TOKL,TOKL,EXP)
- s_exp5(TOKL,TOKL,EXP,EXP)
- s_exp2(TOKL,TOKL,EXP)
- s_exp6(TOKL,TOKL,EXP,EXP)
- s_exp3(TOKL,TOKL,EXP)
- s_exp7(TOKL,TOKL,EXP,EXP)
- s_exp4(TOKL,TOKL,EXP)
- s_exp8(TOKL,TOKL,STRING,EXP)
- s_sent(TOKL,TOKL,SENT)
-
- CLAUSES
- s_exp(LL1,LL0,EXP):-
- s_exp1(LL1,LL0,EXP).
-
- s_exp1(LL1,LL0,EXP_):-
- s_exp2(LL1,LL2,EXP),
- s_exp5(LL2,LL0,EXP,EXP_).
-
- s_exp2(LL1,LL0,EXP_):-
- s_exp3(LL1,LL2,EXP),
- s_exp6(LL2,LL0,EXP,EXP_).
-
- s_exp3(LL1,LL0,EXP_):-
- s_exp4(LL1,LL2,EXP),
- s_exp7(LL2,LL0,EXP,EXP_).
-
- s_exp4([t(id(STRING),_)|LL1],LL0,EXP_):-!,
- s_exp8(LL1,LL0,STRING,EXP_).
- s_exp4([t(minus,_)|LL1],LL0,neg(EXP)):-!,
- s_exp4(LL1,LL0,EXP).
- s_exp4([t(int(INTEGER),_)|LL],LL,int(INTEGER)):-!.
- s_exp4([t(real(REAL),_)|LL],LL,real(REAL)):-!.
- s_exp4([t(str(STRING),_)|LL],LL,str(STRING)):-!.
- s_exp4([t(char(CHAR),_)|LL],LL,char(CHAR)):-!.
- s_exp4([t(lpar,_)|LL1],LL0,EXP):-!,
- s_exp(LL1,LL2,EXP),
- expect(t(rpar,_),LL2,LL0).
- s_exp4(LL,_,_):-syntax_error(exp4,LL),fail.
-
- s_sent([t(if_,_)|LL1],LL0,ifthenelse(EXP,SENT,SENT1)):-
- s_exp(LL1,LL2,EXP),
- expect(t(then,_),LL2,LL3),
- s_sent(LL3,LL4,SENT),
- expect(t(else,_),LL4,LL5),
- s_sent(LL5,LL0,SENT1),!.
- s_sent([t(if_,_)|LL1],LL0,ifthen(EXP,SENT)):-!,
- s_exp(LL1,LL2,EXP),
- expect(t(then,_),LL2,LL3),
- s_sent(LL3,LL0,SENT).
- s_sent([t(while,_)|LL1],LL0,while(EXP,SENT)):-!,
- s_exp(LL1,LL2,EXP),
- expect(t(do,_),LL2,LL3),
- s_sent(LL3,LL0,SENT).
- s_sent([t(goto,_)|LL1],LL0,goto_line(INTEGER)):-
- expect(t(int(INTEGER),_),LL1,LL0),!.
- s_sent([t(goto,_)|LL1],LL0,goto_lbl(STRING)):-!,
- expect(t(id(STRING),_),LL1,LL0).
- s_sent(LL,_,_):-syntax_error(sent,LL),fail.
-
- s_exp5([t(plus,_)|LL1],LL0,EXP,EXP_):-!,
- s_exp2(LL1,LL2,EXP1),
- s_exp5(LL2,LL0,plus(EXP,EXP1),EXP_).
- s_exp5([t(minus,_)|LL1],LL0,EXP,EXP_):-!,
- s_exp2(LL1,LL2,EXP1),
- s_exp5(LL2,LL0,minus(EXP,EXP1),EXP_).
- s_exp5(LL,LL,EXP,EXP).
-
- s_exp6([t(mult,_)|LL1],LL0,EXP,EXP_):-!,
- s_exp3(LL1,LL2,EXP1),
- s_exp6(LL2,LL0,mult(EXP,EXP1),EXP_).
- s_exp6([t(div,_)|LL1],LL0,EXP,EXP_):-!,
- s_exp3(LL1,LL2,EXP1),
- s_exp6(LL2,LL0,div(EXP,EXP1),EXP_).
- s_exp6(LL,LL,EXP,EXP).
-
- s_exp7([t(power,_)|LL1],LL0,EXP,power(EXP,EXP1)):-!,
- s_exp3(LL1,LL0,EXP1).
- s_exp7([t(exclmmark,_)|LL],LL,EXP,factorial(EXP)):-!.
- s_exp7([t(questionmark,_)|LL1],LL0,EXP,EXP_):-!,
- s_exp4(LL1,LL2,EXP1),
- expect(t(colon,_),LL2,LL3),
- s_exp4(LL3,LL4,EXP2),
- s_exp7(LL4,LL0,conditional(EXP,EXP1,EXP2),EXP_).
- s_exp7(LL,LL,EXP,EXP).
-
- s_exp8([t(lpar,_)|LL1],LL0,STRING,call(PROCID,PARMLIST)):-!,
- s_parmlist(LL1,LL2,PARMLIST),
- expect(t(rpar,_),LL2,LL0),STRING=PROCID.
- s_exp8(LL,LL,STRING,var(STRING)):-!.
-
- s_parmlist(LL1,LL0,[EXP|PARMLIST]):-
- s_exp(LL1,LL2,EXP),
- s_parmlist1(LL2,LL0,PARMLIST).
-
- s_parmlist1([t(comma,_)|LL1],LL2,PARMLIST):-!,
- s_parmlist(LL1,LL2,PARMLIST).
- s_parmlist1(LL,LL,[]).
-