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

编译器/解释器

开发平台:

Others

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