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

编译器/解释器

开发平台:

Others

  1. {
  2. import java.io.*;
  3. }
  4. class ExprParser extends Parser;
  5. options {
  6. codeGenMakeSwitchThreshold = 3;
  7. codeGenBitsetTestThreshold = 4;
  8. buildAST=true;
  9. ASTLabelType = "antlr.CommonAST"; // change default of "AST"
  10. }
  11. expr : assignExpr EOF! ;
  12. assignExpr
  13. : addExpr
  14. (
  15. ASSIGN^
  16. assignExpr 
  17. )?
  18. ;
  19. addExpr
  20. : multExpr 
  21. (
  22. pm:PLUS_MINUS^
  23. me:multExpr
  24. exception 
  25. catch [ RecognitionException ex ] 
  26. System.out.println("Caught error in addExpr");
  27. reportError(ex.toString()); 
  28. }
  29. )*
  30. ;
  31. multExpr
  32. : postfixExpr
  33. (
  34. MULT_DIV^
  35. postfixExpr
  36. )*
  37. ;
  38. postfixExpr
  39. : (id:ID LPAREN)=>
  40. // Matches function call syntax like "id(arg,arg)" 
  41. id2:ID^
  42. (
  43.          parenArgs
  44. )?
  45. | atom
  46. ;
  47. parenArgs
  48. :
  49.       LPAREN!
  50.       (
  51.          assignExpr
  52.          (
  53.             COMMA!
  54.         assignExpr
  55.          )*
  56.       )?
  57.       RPAREN!
  58. ;
  59. atom
  60. : ID
  61. | INT
  62. | CHAR_LITERAL 
  63. | STRING_LITERAL
  64. | LPAREN! assignExpr RPAREN!
  65. ;
  66. class ExprLexer extends Lexer;
  67. WS : (' '
  68. | 't'
  69. | 'n'
  70. | 'r')
  71. { _ttype = Token.SKIP; }
  72. ;
  73. LPAREN: '('
  74. ;
  75. RPAREN: ')'
  76. ;
  77. PLUS_MINUS: '+' | '-'
  78. ;
  79. MULT_DIV : '*' | '/'
  80.    ;
  81. ASSIGN : '='
  82. ;
  83. COMMA : ','
  84.    ;
  85.    
  86. CHAR_LITERAL
  87. : ''' (ESC|~''') '''
  88. ;
  89. STRING_LITERAL
  90. : '"' (ESC|~'"')* '"'
  91. ;
  92. protected
  93. ESC : '\'
  94. ( 'n'
  95. | 'r'
  96. | 't'
  97. | 'b'
  98. | 'f'
  99. | '"'
  100. | '''
  101. | '\'
  102. | ('0'..'3')
  103. (
  104. options {
  105. warnWhenFollowAmbig = false;
  106. }
  107. : ('0'..'9')
  108. (
  109. options {
  110. warnWhenFollowAmbig = false;
  111. }
  112. : '0'..'9'
  113. )?
  114. )?
  115. | ('4'..'7')
  116. (
  117. options {
  118. warnWhenFollowAmbig = false;
  119. }
  120. : ('0'..'9')
  121. )?
  122. )
  123. ;
  124. protected
  125. DIGIT
  126. : '0'..'9'
  127. ;
  128. INT 
  129. : (DIGIT)+
  130. ;
  131. ID
  132. options {
  133. testLiterals = true;
  134. }
  135. : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*
  136. ;