Changeset 3802 for applications/trunk/LFC/parser/Parser.rf
- Timestamp:
- Jun 3, 2008, 1:44:26 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/trunk/LFC/parser/Parser.rf
r3800 r3802 4 4 $func Main = e; 5 5 Main = 6 <Lexer <Expr_Open 7 'dec merge: List*List -> List;' 8 'var n: Node;' 9 ' l1, l2: List;' 10 'def merge (n, l2) = n[]","[]l2 ;' 11 ' merge (n[]","[]l1, l2) = scat(n, ",", merge(l1, l2)) ;' 12 >> :: e.tokens, 13 <WriteLn e.tokens>, 14 <WriteLn <Program e.tokens>>; 6 <Lexer <File_Open "samples.lfc">> :: e.tokens, 7 //<WriteLn e.tokens>, 8 <WriteLn <GetRAST <Program e.tokens>>>; 9 10 $func GetRAST e.ast = e.ast; 11 GetRAST { 12 /*empty*/ = /*empty*/; 13 t.term e.ast = t.term : { 14 (IDENT t.name VAR) = (VAR t.name); 15 (IDENT t.name CALL e.args) = (CALL t.name <GetRAST e.args>); 16 (SENTENCE t.name e.exp (WHERE e.assigns)) = (SENTENCE t.name (LET (<GetRAST e.assigns>) <GetRAST e.exp>)); 17 (PAREN e.exp (WHERE e.assigns)) = (PAREN (LET (<GetRAST e.assigns>) <GetRAST e.exp>)); 18 (e.exp) = (<GetRAST e.exp>); 19 s.sym = s.sym; 20 } :: t.term, 21 t.term <GetRAST e.ast>; 22 }; 15 23 16 24 $func Parse (e.tokens) e.expr = e.ast (e.tokens); 17 25 Parse { 18 26 (e.tokens) /*empty*/ = (e.tokens); 19 (e.tokens) t.term e.expr = <WriteLn <L 0 e.tokens> PPP t.term e.expr>,t.term : {27 (e.tokens) t.term e.expr = t.term : { 20 28 (Get s.func) = 21 29 <Apply s.func e.tokens> : e.ast (e.tokens_rest), … … 34 42 35 43 $func Error (e.tokens) e.message = (e.tokens); 36 Error {((e.tk (e.pos)) e) e.message =44 Error ((e.tk (e.pos)) e) e.message = 37 45 <Write e.pos> <Print ' --- 'e.message' while ('> <Write e.tk> <PrintLn ') have been got'>, 38 46 $error "Can't parse the program"; 39 (e1) e2 = <WriteLn Eee (e1) e2>, $fail;}; 40 41 $public $func Program e.tokens = e.ast (e.tokens); 47 48 $func Program e.tokens = e.ast (e.tokens); 42 49 Program e.tokens = { 43 50 e.tokens : (DEC e) e = <Parse (e.tokens) (FUNC (Get &FunctionDec) (Get &VarDecAndFuncDef)) (Get &ProgramRest)>; … … 48 55 ProgramRest e.tokens = { 49 56 e.tokens : (EOF e) = (); 50 e.tokens : (DEC e) e = <Program (e.tokens)>;57 e.tokens : (DEC e) e = <Program e.tokens>; 51 58 <Error (e.tokens) "expected function declaration">; 52 59 }; … … 206 213 e.tokens : \{ (ELSE e) e; (RPAR e) e; (SC e) e; (THEN e) e; } = (e.tokens); 207 214 e.tokens : (CONCAT e) e.tokens_rest = <ExpWithWhere e.tokens_rest>; 208 e.tokens : (WHERE e) e.tokens_rest = (WHERE <VarassignList e.tokens_rest>);215 e.tokens : (WHERE e) e.tokens_rest = <Parse (e.tokens_rest) (WHERE (Get &VarassignList))>; 209 216 <Error (e.tokens)>; 210 217 };
Note: See TracChangeset
for help on using the changeset viewer.