Guest User

Untitled

a guest
Apr 12th, 2011
720
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. program : expr_list { $$ = $1; $$->eval(new Table()); } ;
  2.  
  3. multi_lf : /* empty */ | multi_lf LF ;
  4.  
  5. expr_list : multi_lf expr_list2 multi_lf { $$ = $1; } ;
  6.  
  7. expr_list2 : expr_list2 LF multi_lf expr { $$ = new BlockNode($1, $4); }
  8. | expr { $$ = $1; }
  9. ;
  10.  
  11. expr : lvalue { $$ = new MemberNode($1.node, $1.name); }
  12. | lvalue ASSIGN expr { $$ = new AssignmentNode($1.node, $1.name, $3); }
  13. | OPAREN expr CPAREN { $$ = $2; }
  14. | expr OPAREN call_param_list CPAREN { $$ = new CallNode($1, $3); }
  15. | FUNC func_param_list LF expr_list END { $$ = new FuncNode($2, $4); }
  16.  
  17. | IF expr LF expr_list ENDIF { $$ = new ConditionalNode($2, $4); }
  18. | IF expr LF expr_list ELSE expr_list ENDIF { $$ = new ConditionalNode($2, $4, $6); }
  19. | WHILE expr LF expr_list LOOP { $$ = new LoopNode($2, $4, false); }
  20.  
  21. | INTEGER { $$ = new IntegerNode(atol($1)); }
  22. ;
  23.  
  24.  
  25. lvalue : expr DOT NAME { $$.node = $1; $$.name = $3; }
  26. | NAME { $$.node = NULL; $$.name = $1; }
  27. ;
  28.  
  29. func_param_list : /* empty */ { $$ = new NodeFuncParamList(); }
  30. | func_param { $$ = new NodeFuncParamList(); if ($1.node) $$->add($1.name, $1.node); else $$->add($1.name); }
  31. | func_param_list COMMA func_param { $$ = $1; if ($3.node) $$->add($3.name, $3.node); else $$->add($3.name); }
  32. ;
  33.  
  34. call_param_list : /* empty */ { $$ = new NodeCallParamList(); }
  35. | call_param { $$ = new NodeCallParamList(); if ($1.name) $$->addNamed($1.name, $1.node); else $$->addPositional($1.node); }
  36. | call_param_list COMMA call_param { $$ = $1; if ($3.name) $$->addNamed($3.name, $3.node); else $$->addPositional($3.node); }
  37. ;
  38.  
  39. func_param : NAME { $$.name = $1; $$.node = NULL; }
  40. | NAME COLON expr { $$.name = $1; $$.node = $3; }
  41. ;
  42.  
  43. call_param : expr { $$.name = NULL; $$.node = $1; }
  44. | NAME COLON expr { $$.name = $1; $$.node = $3; }
  45. ;
Advertisement
Add Comment
Please, Sign In to add comment