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

编译器/解释器

开发平台:

Others

  1. class CalcParser extends Parser;
  2. options {
  3. buildAST = true; // uses CommonAST by default
  4. }
  5. expr
  6. : mexpr (PLUS^ mexpr)* SEMI!
  7. ;
  8. mexpr
  9. : atom (STAR^ atom)*
  10. ;
  11. atom: INT
  12. ;
  13. class CalcLexer extends Lexer;
  14. WS : (' '
  15. | 't'
  16. | 'n'
  17. | 'r')
  18. { _ttype = Token.SKIP; }
  19. ;
  20. LPAREN: '('
  21. ;
  22. RPAREN: ')'
  23. ;
  24. STAR: '*'
  25. ;
  26. PLUS: '+'
  27. ;
  28. SEMI: ';'
  29. ;
  30. protected
  31. DIGIT
  32. : '0'..'9'
  33. ;
  34. INT : (DIGIT)+
  35. ;
  36. class CalcTreeWalker extends TreeParser;
  37. expr returns [float r]
  38. {
  39. float a,b;
  40. r=0;
  41. }
  42. : #(PLUS a=expr b=expr) {r = a+b;}
  43. | #(STAR a=expr b=expr) {r = a*b;}
  44. | i:INT {r = (float)Integer.parseInt(i.getText());}
  45. ;