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

编译器/解释器

开发平台:

Others

  1. options {
  2. language="Cpp";
  3. }
  4. /** Java 1.1 AST Recognizer Grammar
  5.  *
  6.  * Author:
  7.  * Terence Parr parrt@magelang.com
  8.  *
  9.  * This grammar is in the PUBLIC DOMAIN
  10.  *
  11.  * BUGS
  12.  */
  13. class JavaTreeParser extends TreeParser;
  14. options {
  15. importVocab=Java;
  16. }
  17. compilationUnit
  18. : (packageDefinition)?
  19. (importDefinition)*
  20. (typeDefinition)*
  21. ;
  22. packageDefinition
  23. : #( PACKAGE_DEF identifier )
  24. ;
  25. importDefinition
  26. : #( IMPORT identifierStar )
  27. ;
  28. typeDefinition
  29. : #(CLASS_DEF modifiers IDENT extendsClause implementsClause objBlock )
  30. | #(INTERFACE_DEF modifiers )
  31. ;
  32. typeSpec
  33. : #(TYPE typeSpecArray)
  34. ;
  35. typeSpecArray
  36. : #( ARRAY_DECLARATOR typeSpecArray )
  37. | type
  38. ;
  39. type: identifier
  40. | builtInType
  41. ;
  42. builtInType
  43.     :   LITERAL_void
  44.     |   LITERAL_boolean
  45.     |   LITERAL_byte
  46.     |   LITERAL_char
  47.     |   LITERAL_short
  48.     |   LITERAL_int
  49.     |   LITERAL_float
  50.     |   LITERAL_long
  51.     |   LITERAL_double
  52.     ;
  53. modifiers
  54. : #( MODIFIERS (modifier)* )
  55. ;
  56. modifier
  57.     :   LITERAL_private
  58.     |   LITERAL_public
  59.     |   LITERAL_protected
  60.     |   LITERAL_static
  61.     |   LITERAL_transient
  62.     |   LITERAL_final
  63.     |   LITERAL_abstract
  64.     |   LITERAL_native
  65.     |   LITERAL_threadsafe
  66.     |   LITERAL_synchronized
  67.     |   LITERAL_const
  68.     |   LITERAL_volatile
  69.     ;
  70. extendsClause
  71. : #(EXTENDS_CLAUSE (identifier)* )
  72. ;
  73. implementsClause
  74. : #(IMPLEMENTS_CLAUSE (identifier)* )
  75. ;
  76. objBlock
  77. : #( OBJBLOCK
  78. ( ctorDef
  79. | methodDef
  80. | variableDef
  81. | typeDefinition
  82. | #(STATIC_INIT slist)
  83. | #(INSTANCE_INIT slist)
  84. )*
  85. )
  86. ;
  87. ctorDef
  88. : #(CTOR_DEF modifiers methodHead slist)
  89. ;
  90. methodDef
  91. : #(METHOD_DEF modifiers typeSpec methodHead (slist)?)
  92. ;
  93. variableDef
  94. : #(VARIABLE_DEF modifiers typeSpec variableDeclarator varInitializer)
  95. ;
  96. parameterDef
  97. : #(PARAMETER_DEF modifiers typeSpec IDENT )
  98. ;
  99. objectinitializer
  100. : #(INSTANCE_INIT slist)
  101. ;
  102. variableDeclarator
  103. : IDENT
  104. | LBRACK variableDeclarator
  105. ;
  106. varInitializer
  107. : #(ASSIGN initializer)
  108. |
  109. ;
  110. initializer
  111. : expression
  112. | arrayInitializer
  113. ;
  114. arrayInitializer
  115. : #(ARRAY_INIT (initializer)+)
  116. ;
  117. methodHead
  118. : IDENT #( PARAMETERS (parameterDef)* ) (throwsClause)?
  119. ;
  120. throwsClause
  121. : #( LITERAL_throws (identifier)* )
  122. ;
  123. identifier
  124. : IDENT
  125. | #( DOT identifier IDENT )
  126. ;
  127. identifierStar
  128. : IDENT
  129. | #( DOT identifier (STAR|IDENT) )
  130. ;
  131. slist
  132. : #( SLIST (stat)* )
  133. ;
  134. stat: typeDefinition
  135. | variableDef
  136. | expression
  137. | #(LABELED_STAT IDENT stat)
  138. | #("if" expression stat)
  139. | #( "for"
  140. #(FOR_INIT (variableDef | elist)?)
  141. #(FOR_CONDITION (expression)?)
  142. #(FOR_ITERATOR (elist)?)
  143. stat
  144. )
  145. | #("while" expression stat)
  146. | #("do" stat expression)
  147. | #("break" (IDENT)? )
  148. | #("continue" (IDENT)? )
  149. | #("return" (expression)? )
  150. | #("switch" expression (caseGroup)*)
  151. | #("throw" expression)
  152. | #("synchronized" stat)
  153. | tryBlock
  154. | slist // nested SLIST
  155. | EMPTY_STAT
  156. ;
  157. caseGroup
  158. : #(CASE_GROUP (#("case" expression) | "default")+ slist)
  159. ;
  160. tryBlock
  161. : #( "try" slist (handler)* (#("finally" slist))? )
  162. ;
  163. handler
  164. : #( "catch" parameterDef slist )
  165. ;
  166. elist
  167. : #( ELIST (expression)* )
  168. ;
  169. expression
  170. : #(EXPR expr)
  171. ;
  172. expr: #(QUESTION expr expr expr) // trinary operator
  173. | #(ASSIGN expr expr) // binary operators...
  174. | #(PLUS_ASSIGN expr expr)
  175. | #(MINUS_ASSIGN expr expr)
  176. | #(STAR_ASSIGN expr expr)
  177. | #(DIV_ASSIGN expr expr)
  178. | #(MOD_ASSIGN expr expr)
  179. | #(SR_ASSIGN expr expr)
  180. | #(BSR_ASSIGN expr expr)
  181. | #(SL_ASSIGN expr expr)
  182. | #(BAND_ASSIGN expr expr)
  183. | #(BXOR_ASSIGN expr expr)
  184. | #(BOR_ASSIGN expr expr)
  185. | #(LOR expr expr)
  186. | #(LAND expr expr)
  187. | #(BOR expr expr)
  188. | #(BXOR expr expr)
  189. | #(BAND expr expr)
  190. | #(NOT_EQUAL expr expr)
  191. | #(EQUAL expr expr)
  192. | #(LT_ expr expr)
  193. | #(GT expr expr)
  194. | #(LE expr expr)
  195. | #(GE expr expr)
  196. | #(SL expr expr)
  197. | #(SR expr expr)
  198. | #(BSR expr expr)
  199. | #(PLUS expr expr)
  200. | #(MINUS expr expr)
  201. | #(DIV expr expr)
  202. | #(MOD expr expr)
  203. | #(STAR expr expr)
  204. | #(INC expr)
  205. | #(DEC expr)
  206. | #(POST_INC expr)
  207. | #(POST_DEC expr)
  208. | #(BNOT expr)
  209. | #(LNOT expr)
  210. | #(LITERAL_instanceof expr expr)
  211. | #(UNARY_MINUS expr)
  212. | #(UNARY_PLUS expr)
  213. | primaryExpression
  214. ;
  215. primaryExpression
  216.     :   IDENT
  217.     |   #( DOT
  218. ( primaryExpression
  219. ( IDENT
  220. | arrayIndex
  221. | LITERAL_this
  222. | LITERAL_class
  223. | #( "new" IDENT elist )
  224. )
  225. | #(ARRAY_DECLARATOR builtInType)
  226. | builtInType ("class")?
  227. )
  228. )
  229. | arrayIndex
  230. | #(METHOD_CALL primaryExpression elist)
  231. | #(TYPECAST typeSpec expr)
  232. |   newExpression
  233. |   constant
  234.     |   LITERAL_super
  235.     |   LITERAL_true
  236.     |   LITERAL_false
  237.     |   LITERAL_this
  238.     |   LITERAL_null
  239. | typeSpec // type name used with instanceof
  240. ;
  241. arrayIndex
  242. : #(INDEX_OP primaryExpression expression)
  243. ;
  244. constant
  245.     :   NUM_INT
  246.     |   CHAR_LITERAL
  247.     |   STRING_LITERAL
  248.     |   NUM_FLOAT
  249.     ;
  250. newExpression
  251. : #( "new" type
  252. ( newArrayDeclarator (arrayInitializer)?
  253. | elist
  254. )
  255. )
  256. ;
  257. newArrayDeclarator
  258. : #( ARRAY_DECLARATOR (newArrayDeclarator)? (expression)? )
  259. ;