calc.g
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:1k
源码类别:

编译器/解释器

开发平台:

Others

  1. options {
  2. language = "Sather";
  3. }
  4. class CALC_PARSER extends Parser;
  5. options {
  6. buildAST = true; // uses CommonAST by default
  7. }
  8. expr
  9. : mexpr (PLUS^ mexpr)* SEMI!
  10. ;
  11. mexpr
  12. : atom (STAR^ atom)*
  13. ;
  14. atom: INT
  15. ;
  16. class CALC_LEXER extends Lexer;
  17. WS : (' '
  18. | 't'
  19. | 'n'
  20. | 'r')
  21. { sa_ttype := ANTLR_COMMON_TOKEN::SKIP; }
  22. ;
  23. LPAREN: '('
  24. ;
  25. RPAREN: ')'
  26. ;
  27. STAR: '*'
  28. ;
  29. PLUS: '+'
  30. ;
  31. SEMI: ';'
  32. ;
  33. protected
  34. DIGIT
  35. : '0'..'9'
  36. ;
  37. INT : (DIGIT)+
  38. ;
  39. class CALC_TREE_WALKER extends TreeParser;
  40. options {
  41. buildAST = true;
  42. // ASTLabelType = "antlr.CommonAST";
  43. }
  44. expr:! #(PLUS left:expr right:expr)
  45. {
  46. if ( @right.ttype = INT and 
  47.  #INT(@right.text) = 0 ) then
  48.                                 -- x+0
  49. @expr := @left;
  50. elsif ( @left.ttype = INT and
  51.   #INT(@left.text) = 0 ) then
  52.                                 -- 0+x
  53. @expr := @right;
  54. else -- x+y
  55. @expr := @(PLUS, left, right);
  56. end;
  57. }
  58. | #(STAR expr expr)
  59. | i:INT
  60. ;