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

编译器/解释器

开发平台:

Others

  1. options {
  2. language = "Sather";
  3. }
  4. /* This example demonstrates the heterogeneous tree construction
  5.  *  mechanism.  Compare this example to examples/calc/calc.g
  6.  *  to see that I use tree node methods not a tree walker to compute
  7.  *  the result.
  8.  */
  9. class CALC_PARSER extends Parser;
  10. options {
  11. buildAST = true; // uses CommonAST by default
  12. }
  13. // define a bunch of specific AST nodes to build.
  14. // can override at actual reference of tokens in grammar
  15. // below.
  16. tokens {
  17. PLUS<AST=PLUS_NODE>;
  18. STAR<AST=MULT_NODE>;
  19. }
  20. expr
  21. : mexpr (PLUS^ mexpr)* SEMI!
  22. ;
  23. mexpr
  24. : atom (STAR^ atom)*
  25. ;
  26. atom: INT<AST=INT_NODE> // could have done in tokens{} section
  27. ;
  28. class CALC_LEXER extends Lexer;
  29. WS : (' '
  30. | 't'
  31. | 'n'
  32. | 'r')
  33. { sa_ttype := ANTLR_COMMON_TOKEN::SKIP; }
  34. ;
  35. LPAREN: '('
  36. ;
  37. RPAREN: ')'
  38. ;
  39. STAR: '*'
  40. ;
  41. PLUS: '+'
  42. ;
  43. SEMI: ';'
  44. ;
  45. protected
  46. DIGIT
  47. : '0'..'9'
  48. ;
  49. INT : (DIGIT)+
  50. ;