/testability-explorer/src/main/antlr/java15.tree.g

http://testability-explorer.googlecode.com/ · Unknown · 481 lines · 408 code · 73 blank · 0 comment · 0 complexity · b77c4e292179b3c99fb56fce47ba8aaa MD5 · raw file

  1. /* Java 1.5 AST Recognizer Grammar
  2. *
  3. * Author: (see java.g preamble)
  4. *
  5. * This grammar is in the PUBLIC DOMAIN
  6. */
  7. header {
  8. package com.google.test.metric.javasrc;
  9. import java.util.List;
  10. import java.util.ArrayList;
  11. import com.google.test.metric.Type;
  12. import com.google.test.metric.JavaType;
  13. }
  14. class JavaTreeParser extends TreeParser;
  15. options {
  16. importVocab = Java;
  17. }
  18. {
  19. CompilationUnitBuilder builder;
  20. Type ignore;
  21. private String s(AST ast) {
  22. return ast.getText();
  23. }
  24. }
  25. compilationUnit
  26. : (packageDefinition)?
  27. (importDefinition)*
  28. (typeDefinition)*
  29. ;
  30. packageDefinition
  31. : #( PACKAGE_DEF annotations pkgIdent:identifier )
  32. ;
  33. importDefinition
  34. : #( IMPORT identifierStar)
  35. | #( STATIC_IMPORT identifierStar )
  36. ;
  37. typeDefinition
  38. {
  39. Type extendsType;
  40. List<Type> impls;
  41. }
  42. : #(CLASS_DEF m:modifiers i:IDENT
  43. (ignore=typeParameters)? extendsType=extendsClause
  44. impls=implementsClause {
  45. builder.startType(i.getLine(), s(i), extendsType, impls);
  46. }
  47. objBlock ) {builder.endType();}
  48. | #(INTERFACE_DEF modifiers IDENT (ignore=typeParameters)? extendsType=extendsClause interfaceBlock )
  49. | #(ENUM_DEF modifiers IDENT impls=implementsClause enumBlock )
  50. | #(ANNOTATION_DEF modifiers IDENT annotationBlock )
  51. ;
  52. typeParameters returns [Type type = null;]
  53. : #(TYPE_PARAMETERS (type=typeParameter)+)
  54. ;
  55. typeParameter returns [Type type = null;]
  56. : #(TYPE_PARAMETER IDENT (type=typeUpperBounds)?)
  57. ;
  58. typeUpperBounds returns [Type type = null;]
  59. : #(TYPE_UPPER_BOUNDS (type=classOrInterfaceType)+)
  60. ;
  61. typeSpec returns [Type type = null;]
  62. : #(TYPE type=typeSpecArray)
  63. ;
  64. typeSpecArray returns [Type type = null;]
  65. : #( ARRAY_DECLARATOR type=typeSpecArray )
  66. | type=type
  67. ;
  68. type returns [Type type = null;]
  69. : type=classOrInterfaceType
  70. | type=builtInType
  71. ;
  72. classOrInterfaceType returns [Type info = null;]
  73. {info = builder.toType(classOrInterfaceType_AST_in);}
  74. : IDENT (ignore=typeArguments)?
  75. | #( DOT ignore=classOrInterfaceType )
  76. ;
  77. typeArguments returns [Type type = null;]
  78. /* : #(TYPE_ARGUMENTS (type=type ignore=typeArgument)+) this seams to be wrong */
  79. : #(TYPE_ARGUMENTS (ignore=typeArgument)+)
  80. ;
  81. typeArgument returns [Type type = null;]
  82. : #( TYPE_ARGUMENT
  83. ( type=typeSpec
  84. | type=wildcardType
  85. )
  86. )
  87. ;
  88. wildcardType returns [Type type = null;]
  89. : #(WILDCARD_TYPE (type=typeArgumentBounds)?)
  90. ;
  91. typeArgumentBounds returns [Type type = null;]
  92. : #(TYPE_UPPER_BOUNDS (type=classOrInterfaceType)+)
  93. | #(TYPE_LOWER_BOUNDS (type=classOrInterfaceType)+)
  94. ;
  95. builtInType returns [Type type = null;]
  96. : "void" {type = JavaType.VOID;}
  97. | "boolean" {type = JavaType.BOOLEAN;}
  98. | "byte" {type = JavaType.BYTE;}
  99. | "char" {type = JavaType.CHAR;}
  100. | "short" {type = JavaType.SHORT;}
  101. | "int" {type = JavaType.INT;}
  102. | "float" {type = JavaType.FLOAT;}
  103. | "long" {type = JavaType.LONG;}
  104. | "double" {type = JavaType.DOUBLE;}
  105. ;
  106. modifiers
  107. : #( MODIFIERS (modifier)* )
  108. ;
  109. modifier
  110. : "private"
  111. | "public"
  112. | "protected"
  113. | "static"
  114. | "transient"
  115. | "final"
  116. | "abstract"
  117. | "native"
  118. | "threadsafe"
  119. | "synchronized"
  120. | "const"
  121. | "volatile"
  122. | "strictfp"
  123. | annotation
  124. ;
  125. annotations
  126. : #(ANNOTATIONS (annotation)* )
  127. ;
  128. annotation
  129. : #(ANNOTATION identifier (annotationMemberValueInitializer | (anntotationMemberValuePair)+)? )
  130. ;
  131. annotationMemberValueInitializer
  132. : conditionalExpr | annotation | annotationMemberArrayInitializer
  133. ;
  134. anntotationMemberValuePair
  135. : #(ANNOTATION_MEMBER_VALUE_PAIR IDENT annotationMemberValueInitializer)
  136. ;
  137. annotationMemberArrayInitializer
  138. : #(ANNOTATION_ARRAY_INIT (annotationMemberArrayValueInitializer)* )
  139. ;
  140. annotationMemberArrayValueInitializer
  141. : conditionalExpr | annotation
  142. ;
  143. extendsClause returns [Type type=null]
  144. : #(EXTENDS_CLAUSE (type=classOrInterfaceType)* )
  145. ;
  146. implementsClause returns [List<Type> impls=new ArrayList<Type>();]
  147. {Type c;}
  148. : #(IMPLEMENTS_CLAUSE (c=classOrInterfaceType{impls.add(c);})* )
  149. ;
  150. interfaceBlock
  151. : #( OBJBLOCK
  152. ( methodDecl
  153. | variableDef
  154. | typeDefinition
  155. )*
  156. )
  157. ;
  158. objBlock
  159. : #( OBJBLOCK
  160. ( ctorDef
  161. | methodDef
  162. | variableDef
  163. | typeDefinition
  164. | #(STATIC_INIT slist)
  165. | #(INSTANCE_INIT slist)
  166. )*
  167. )
  168. ;
  169. annotationBlock
  170. : #( OBJBLOCK
  171. ( annotationFieldDecl
  172. | variableDef
  173. | typeDefinition
  174. )*
  175. )
  176. ;
  177. enumBlock
  178. : #( OBJBLOCK
  179. (
  180. enumConstantDef
  181. )*
  182. ( ctorDef
  183. | methodDef
  184. | variableDef
  185. | typeDefinition
  186. | #(STATIC_INIT slist)
  187. | #(INSTANCE_INIT slist)
  188. )*
  189. )
  190. ;
  191. ctorDef
  192. : #(CTOR_DEF modifiers (ignore=typeParameters)? methodHead (slist)?)
  193. ;
  194. methodDecl
  195. : #(METHOD_DEF modifiers (ignore=typeParameters)? ignore=typeSpec methodHead)
  196. ;
  197. methodDef
  198. : #(METHOD_DEF modifiers (ignore=typeParameters)? ignore=typeSpec methodHead (slist)?)
  199. ;
  200. variableDef
  201. {Type type;}
  202. : #(VARIABLE_DEF m:modifiers type=typeSpec v:variableDeclarator i:varInitializer)
  203. {builder.type.addField(s(v), type, builder.visibility(m), builder.isStatic(m), builder.isFinal(m));}
  204. ;
  205. parameterDef
  206. : #(PARAMETER_DEF modifiers ignore=typeSpec IDENT )
  207. ;
  208. variableLengthParameterDef
  209. : #(VARIABLE_PARAMETER_DEF modifiers ignore=typeSpec IDENT )
  210. ;
  211. annotationFieldDecl
  212. : #(ANNOTATION_FIELD_DEF modifiers ignore=typeSpec IDENT (annotationMemberValueInitializer)?)
  213. ;
  214. enumConstantDef
  215. : #(ENUM_CONSTANT_DEF annotations IDENT (elist)? (enumConstantBlock)?)
  216. ;
  217. enumConstantBlock
  218. : #( OBJBLOCK
  219. ( methodDef
  220. | variableDef
  221. | typeDefinition
  222. | #(INSTANCE_INIT slist)
  223. )*
  224. )
  225. ;
  226. objectinitializer
  227. : #(INSTANCE_INIT slist)
  228. ;
  229. variableDeclarator
  230. : IDENT
  231. | LBRACK variableDeclarator
  232. ;
  233. varInitializer
  234. : #(ASSIGN initializer)
  235. |
  236. ;
  237. initializer
  238. : expression
  239. | arrayInitializer
  240. ;
  241. arrayInitializer
  242. : #(ARRAY_INIT (initializer)*)
  243. ;
  244. methodHead
  245. : IDENT #( PARAMETERS (parameterDef)* ) (throwsClause)?
  246. ;
  247. throwsClause
  248. : #( "throws" (ignore=classOrInterfaceType)* )
  249. ;
  250. identifier
  251. : IDENT
  252. | #( DOT identifier IDENT )
  253. ;
  254. identifierStar
  255. : IDENT
  256. | #( DOT identifier (STAR|IDENT) )
  257. ;
  258. slist
  259. : #( SLIST (stat)* )
  260. ;
  261. stat: typeDefinition
  262. | variableDef
  263. | expression
  264. | #(LABELED_STAT IDENT stat)
  265. | #("if" expression stat (stat)? )
  266. | #( "for"
  267. (
  268. #(FOR_INIT ((variableDef)+ | elist)?)
  269. #(FOR_CONDITION (expression)?)
  270. #(FOR_ITERATOR (elist)?)
  271. |
  272. #(FOR_EACH_CLAUSE parameterDef expression)
  273. )
  274. stat
  275. )
  276. | #("while" expression stat)
  277. | #("do" stat expression)
  278. | #("break" (IDENT)? )
  279. | #("continue" (IDENT)? )
  280. | #("return" (expression)? )
  281. | #("switch" expression (caseGroup)*)
  282. | #("throw" expression)
  283. | #("synchronized" expression stat)
  284. | tryBlock
  285. | slist // nested SLIST
  286. | #("assert" expression (expression)?)
  287. | EMPTY_STAT
  288. ;
  289. caseGroup
  290. : #(CASE_GROUP (#("case" expression) | "default")+ slist)
  291. ;
  292. tryBlock
  293. : #( "try" slist (handler)* (#("finally" slist))? )
  294. ;
  295. handler
  296. : #( "catch" parameterDef slist )
  297. ;
  298. elist
  299. : #( ELIST (expression)* )
  300. ;
  301. expression
  302. : #(EXPR expr)
  303. ;
  304. expr
  305. : conditionalExpr
  306. | #(ASSIGN expr expr) // binary operators...
  307. | #(PLUS_ASSIGN expr expr)
  308. | #(MINUS_ASSIGN expr expr)
  309. | #(STAR_ASSIGN expr expr)
  310. | #(DIV_ASSIGN expr expr)
  311. | #(MOD_ASSIGN expr expr)
  312. | #(SR_ASSIGN expr expr)
  313. | #(BSR_ASSIGN expr expr)
  314. | #(SL_ASSIGN expr expr)
  315. | #(BAND_ASSIGN expr expr)
  316. | #(BXOR_ASSIGN expr expr)
  317. | #(BOR_ASSIGN expr expr)
  318. ;
  319. conditionalExpr
  320. : #(QUESTION expr expr expr) // trinary operator
  321. | #(LOR expr expr)
  322. | #(LAND expr expr)
  323. | #(BOR expr expr)
  324. | #(BXOR expr expr)
  325. | #(BAND expr expr)
  326. | #(NOT_EQUAL expr expr)
  327. | #(EQUAL expr expr)
  328. | #(LT expr expr)
  329. | #(GT expr expr)
  330. | #(LE expr expr)
  331. | #(GE expr expr)
  332. | #(SL expr expr)
  333. | #(SR expr expr)
  334. | #(BSR expr expr)
  335. | #(PLUS expr expr)
  336. | #(MINUS expr expr)
  337. | #(DIV expr expr)
  338. | #(MOD expr expr)
  339. | #(STAR expr expr)
  340. | #(INC expr)
  341. | #(DEC expr)
  342. | #(POST_INC expr)
  343. | #(POST_DEC expr)
  344. | #(BNOT expr)
  345. | #(LNOT expr)
  346. | #("instanceof" expr expr)
  347. | #(UNARY_MINUS expr)
  348. | #(UNARY_PLUS expr)
  349. | primaryExpression
  350. ;
  351. primaryExpression
  352. : IDENT
  353. | #( DOT
  354. ( expr
  355. ( IDENT
  356. | arrayIndex
  357. | "this"
  358. | "class"
  359. | newExpression
  360. | "super"
  361. | (ignore=typeArguments)? // for generic methods calls
  362. )
  363. | #(ARRAY_DECLARATOR ignore=typeSpecArray)
  364. | ignore=builtInType ("class")?
  365. )
  366. )
  367. | arrayIndex
  368. | #(METHOD_CALL primaryExpression (ignore=typeArguments)? elist)
  369. | ctorCall
  370. | #(TYPECAST ignore=typeSpec expr)
  371. | newExpression
  372. | constant
  373. | "super"
  374. | "true"
  375. | "false"
  376. | "this"
  377. | "null"
  378. | ignore=typeSpec // type name used with instanceof
  379. ;
  380. ctorCall
  381. : #( CTOR_CALL elist )
  382. | #( SUPER_CTOR_CALL
  383. ( elist
  384. | primaryExpression elist
  385. )
  386. )
  387. ;
  388. arrayIndex
  389. : #(INDEX_OP expr expression)
  390. ;
  391. constant
  392. : NUM_INT
  393. | CHAR_LITERAL
  394. | STRING_LITERAL
  395. | NUM_FLOAT
  396. | NUM_DOUBLE
  397. | NUM_LONG
  398. ;
  399. newExpression
  400. : #( "new" (ignore=typeArguments)? ignore=type
  401. ( newArrayDeclarator (arrayInitializer)?
  402. | elist (objBlock)?
  403. )
  404. )
  405. ;
  406. newArrayDeclarator
  407. : #( ARRAY_DECLARATOR (newArrayDeclarator)? (expression)? )
  408. ;