org.codehaus.groovy.antlr.parser
Class GroovyRecognizer

java.lang.Object
  extended by antlr.Parser
      extended by antlr.LLkParser
          extended by org.codehaus.groovy.antlr.parser.GroovyRecognizer
All Implemented Interfaces:
GroovyTokenTypes

public class GroovyRecognizer
extends LLkParser
implements GroovyTokenTypes

JSR-241 Groovy Recognizer Run 'java Main [-showtree] directory-full-of-groovy-files' [The -showtree option pops up a Swing frame that shows the AST constructed from the parser.] Contributing authors: John Mitchell johnm@non.net Terence Parr parrt@magelang.com John Lilley jlilley@empathy.com Scott Stanchfield thetick@magelang.com Markus Mohnen mohnen@informatik.rwth-aachen.de Peter Williams pete.williams@sun.com Allan Jacobs Allan.Jacobs@eng.sun.com Steve Messick messick@redhills.com James Strachan jstrachan@protique.com John Pybus john@pybus.org John Rose rose00@mac.com Jeremy Rayner groovy@ross-rayner.com Alex Popescu the.mindstorm@gmail.com Martin Kempf mkempf@hsr.ch Reto Kleeb rkleeb@hsr.ch Version 1.00 December 9, 1997 -- initial release Version 1.01 December 10, 1997 fixed bug in octal def (0..7 not 0..8) Version 1.10 August 1998 (parrt) added tree construction fixed definition of WS,comments for mac,pc,unix newlines added unary plus Version 1.11 (Nov 20, 1998) Added "shutup" option to turn off last ambig warning. Fixed inner class def to allow named class defs as statements synchronized requires compound not simple statement add [] after builtInType DOT class in primaryExpression "const" is reserved but not valid..removed from modifiers Version 1.12 (Feb 2, 1999) Changed LITERAL_xxx to xxx in tree grammar. Updated java.g to use tokens {...} now for 2.6.0 (new feature). Version 1.13 (Apr 23, 1999) Didn't have (stat)? for else clause in tree parser. Didn't gen ASTs for interface extends. Updated tree parser too. Updated to 2.6.0. Version 1.14 (Jun 20, 1999) Allowed final/abstract on local classes. Removed local interfaces from methods Put instanceof precedence where it belongs...in relationalExpr It also had expr not type as arg; fixed it. Missing ! on SEMI in classBlock fixed: (expr) + "string" was parsed incorrectly (+ as unary plus). fixed: didn't like Object[].class in parser or tree parser Version 1.15 (Jun 26, 1999) Screwed up rule with instanceof in it. :( Fixed. Tree parser didn't like (expr).something; fixed. Allowed multiple inheritance in tree grammar. oops. Version 1.16 (August 22, 1999) Extending an interface built a wacky tree: had extra EXTENDS. Tree grammar didn't allow multiple superinterfaces. Tree grammar didn't allow empty var initializer: {} Version 1.17 (October 12, 1999) ESC lexer rule allowed 399 max not 377 max. java.tree.g didn't handle the expression of synchronized statements. Version 1.18 (August 12, 2001) Terence updated to Java 2 Version 1.3 by observing/combining work of Allan Jacobs and Steve Messick. Handles 1.3 src. Summary: o primary didn't include boolean.class kind of thing o constructor calls parsed explicitly now: see explicitConstructorInvocation o add strictfp modifier o missing objBlock after new expression in tree grammar o merged local class definition alternatives, moved after declaration o fixed problem with ClassName.super.field o reordered some alternatives to make things more efficient o long and double constants were not differentiated from int/float o whitespace rule was inefficient: matched only one char o add an examples directory with some nasty 1.3 cases o made Main.java use buffered IO and a Reader for Unicode support o supports UNICODE? Using Unicode charVocabulay makes code file big, but only in the bitsets at the end. I need to make ANTLR generate unicode bitsets more efficiently. Version 1.19 (April 25, 2002) Terence added in nice fixes by John Pybus concerning floating constants and problems with super() calls. John did a nice reorg of the primary/postfix expression stuff to read better and makes f.g.super() parse properly (it was METHOD_CALL not a SUPER_CTOR_CALL). Also: o "finally" clause was a root...made it a child of "try" o Added stuff for asserts too for Java 1.4, but *commented out* as it is not backward compatible. Version 1.20 (October 27, 2002) Terence ended up reorging John Pybus' stuff to remove some nondeterminisms and some syntactic predicates. Note that the grammar is stricter now; e.g., this(...) must be the first statement. Trinary ?: operator wasn't working as array name: (isBig ? bigDigits : digits)[i]; Checked parser/tree parser on source for Resin-2.0.5, jive-2.1.1, jdk 1.3.1, Lucene, antlr 2.7.2a4, and the 110k-line jGuru server source. Version 1.21 (October 17, 2003) Fixed lots of problems including: Ray Waldin: add typeDefinition to interfaceBlock in java.tree.g He found a problem/fix with floating point that start with 0 Ray also fixed problem that (int.class) was not recognized. Thorsten van Ellen noticed that \n are allowed incorrectly in strings. TJP fixed CHAR_LITERAL analogously. Version 1.21.2 (March, 2003) Changes by Matt Quail to support generics (as per JDK1.5/JSR14) Notes: o We only allow the "extends" keyword and not the "implements" keyword, since thats what JSR14 seems to imply. o Thanks to Monty Zukowski for his help on the antlr-interest mail list. o Thanks to Alan Eliasen for testing the grammar over his Fink source base Version 1.22 (July, 2004) Changes by Michael Studman to support Java 1.5 language extensions Notes: o Added support for annotations types o Finished off Matt Quail's generics enhancements to support bound type arguments o Added support for new for statement syntax o Added support for static import syntax o Added support for enum types o Tested against JDK 1.5 source base and source base of jdigraph project o Thanks to Matt Quail for doing the hard part by doing most of the generics work Version 1.22.1 (July 28, 2004) Bug/omission fixes for Java 1.5 language support o Fixed tree structure bug with classOrInterface - thanks to Pieter Vangorpto for spotting this o Fixed bug where incorrect handling of SR and BSR tokens would cause type parameters to be recognised as type arguments. o Enabled type parameters on constructors, annotations on enum constants and package definitions o Fixed problems when parsing if ((char.class.equals(c))) {} - solution by Matt Quail at Cenqua Version 1.22.2 (July 28, 2004) Slight refactoring of Java 1.5 language support o Refactored for/"foreach" productions so that original literal "for" literal is still used but the for sub-clauses vary by token type o Fixed bug where type parameter was not included in generic constructor's branch of AST Version 1.22.3 (August 26, 2004) Bug fixes as identified by Michael Stahl; clean up of tabs/spaces and other refactorings o Fixed typeParameters omission in identPrimary and newStatement o Replaced GT reconcilliation code with simple semantic predicate o Adapted enum/assert keyword checking support from Michael Stahl's java15 grammar o Refactored typeDefinition production and field productions to reduce duplication Version 1.22.4 (October 21, 2004) Small bux fixes o Added typeArguments to explicitConstructorInvocation, e.g. new MyParameterised() o Added typeArguments to postfixExpression productions for anonymous inner class super constructor invocation, e.g. new Outer().super() o Fixed bug in array declarations identified by Geoff Roy Version 1.22.4.g.1 o I have taken java.g for Java1.5 from Michael Studman (1.22.4) and have applied the groovy.diff from java.g (1.22) by John Rose back onto the new root (1.22.4) - Jeremy Rayner (Jan 2005) o for a map of the task see... http://groovy.javanicus.com/java-g.png Version 1.22.4.g.2 o mkempf, rkleeb, Dec 2007 o fixed various rules so that they call the correct Create Method to make sure that the line information are correct This grammar is in the PUBLIC DOMAIN


Field Summary
static String[] _tokenNames
           
static BitSet _tokenSet_0
           
static BitSet _tokenSet_1
           
static BitSet _tokenSet_10
           
static BitSet _tokenSet_11
           
static BitSet _tokenSet_12
           
static BitSet _tokenSet_13
           
static BitSet _tokenSet_14
           
static BitSet _tokenSet_15
           
static BitSet _tokenSet_16
           
static BitSet _tokenSet_17
           
static BitSet _tokenSet_18
           
static BitSet _tokenSet_19
           
static BitSet _tokenSet_2
           
static BitSet _tokenSet_20
           
static BitSet _tokenSet_21
           
static BitSet _tokenSet_22
           
static BitSet _tokenSet_23
           
static BitSet _tokenSet_24
           
static BitSet _tokenSet_25
           
static BitSet _tokenSet_26
           
static BitSet _tokenSet_27
           
static BitSet _tokenSet_28
           
static BitSet _tokenSet_29
           
static BitSet _tokenSet_3
           
static BitSet _tokenSet_30
           
static BitSet _tokenSet_31
           
static BitSet _tokenSet_32
           
static BitSet _tokenSet_33
           
static BitSet _tokenSet_34
           
static BitSet _tokenSet_35
           
static BitSet _tokenSet_36
           
static BitSet _tokenSet_37
           
static BitSet _tokenSet_38
           
static BitSet _tokenSet_39
           
static BitSet _tokenSet_4
           
static BitSet _tokenSet_40
           
static BitSet _tokenSet_41
           
static BitSet _tokenSet_42
           
static BitSet _tokenSet_43
           
static BitSet _tokenSet_44
           
static BitSet _tokenSet_45
           
static BitSet _tokenSet_46
           
static BitSet _tokenSet_47
           
static BitSet _tokenSet_48
           
static BitSet _tokenSet_49
           
static BitSet _tokenSet_5
           
static BitSet _tokenSet_50
           
static BitSet _tokenSet_51
           
static BitSet _tokenSet_52
           
static BitSet _tokenSet_53
           
static BitSet _tokenSet_54
           
static BitSet _tokenSet_55
           
static BitSet _tokenSet_56
           
static BitSet _tokenSet_57
           
static BitSet _tokenSet_58
           
static BitSet _tokenSet_59
           
static BitSet _tokenSet_6
           
static BitSet _tokenSet_60
           
static BitSet _tokenSet_61
           
static BitSet _tokenSet_62
           
static BitSet _tokenSet_63
           
static BitSet _tokenSet_64
           
static BitSet _tokenSet_65
           
static BitSet _tokenSet_66
           
static BitSet _tokenSet_67
           
static BitSet _tokenSet_68
           
static BitSet _tokenSet_69
           
static BitSet _tokenSet_7
           
static BitSet _tokenSet_70
           
static BitSet _tokenSet_71
           
static BitSet _tokenSet_72
           
static BitSet _tokenSet_73
           
static BitSet _tokenSet_74
           
static BitSet _tokenSet_75
           
static BitSet _tokenSet_76
           
static BitSet _tokenSet_77
           
static BitSet _tokenSet_78
           
static BitSet _tokenSet_79
           
static BitSet _tokenSet_8
           
static BitSet _tokenSet_80
           
static BitSet _tokenSet_81
           
static BitSet _tokenSet_82
           
static BitSet _tokenSet_83
           
static BitSet _tokenSet_84
           
static BitSet _tokenSet_85
           
static BitSet _tokenSet_86
           
static BitSet _tokenSet_87
           
static BitSet _tokenSet_88
           
static BitSet _tokenSet_89
           
static BitSet _tokenSet_9
           
static BitSet _tokenSet_90
           
static BitSet _tokenSet_91
           
static boolean tracing
           
 
Fields inherited from class antlr.Parser
astFactory, inputState, returnAST, tokenNames, tokenTypeToASTClassMap, traceDepth
 
Fields inherited from interface org.codehaus.groovy.antlr.parser.GroovyTokenTypes
ABSTRACT, ANNOTATION, ANNOTATION_ARRAY_INIT, ANNOTATION_DEF, ANNOTATION_FIELD_DEF, ANNOTATION_MEMBER_VALUE_PAIR, ANNOTATIONS, ARRAY_DECLARATOR, ASSIGN, AT, BAND, BAND_ASSIGN, BIG_SUFFIX, BLOCK, BNOT, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, CASE_GROUP, CLASS_DEF, CLOSABLE_BLOCK, CLOSABLE_BLOCK_OP, CLOSURE_LIST, COLON, COMMA, COMPARE_TO, CTOR_CALL, CTOR_IDENT, DEC, DIGIT, DIV, DIV_ASSIGN, DOLLAR, DOT, DYNAMIC_MEMBER, ELIST, ELVIS_OPERATOR, EMPTY_STAT, ENUM_CONSTANT_DEF, ENUM_DEF, EOF, EQUAL, ESC, EXPONENT, EXPR, EXTENDS_CLAUSE, FINAL, FLOAT_SUFFIX, FOR_CONDITION, FOR_EACH_CLAUSE, FOR_IN_ITERABLE, FOR_INIT, FOR_ITERATOR, GE, GT, HEX_DIGIT, IDENT, IMPLEMENTS_CLAUSE, IMPLICIT_PARAMETERS, IMPORT, INC, INDEX_OP, INSTANCE_INIT, INTERFACE_DEF, LABELED_ARG, LABELED_STAT, LAND, LBRACK, LCURLY, LE, LETTER, LIST_CONSTRUCTOR, LITERAL_as, LITERAL_assert, LITERAL_boolean, LITERAL_break, LITERAL_byte, LITERAL_case, LITERAL_catch, LITERAL_char, LITERAL_class, LITERAL_continue, LITERAL_def, LITERAL_default, LITERAL_double, LITERAL_else, LITERAL_enum, LITERAL_extends, LITERAL_false, LITERAL_finally, LITERAL_float, LITERAL_for, LITERAL_if, LITERAL_implements, LITERAL_import, LITERAL_in, LITERAL_instanceof, LITERAL_int, LITERAL_interface, LITERAL_long, LITERAL_native, LITERAL_new, LITERAL_null, LITERAL_package, LITERAL_private, LITERAL_protected, LITERAL_public, LITERAL_return, LITERAL_short, LITERAL_static, LITERAL_super, LITERAL_switch, LITERAL_synchronized, LITERAL_this, LITERAL_threadsafe, LITERAL_throw, LITERAL_throws, LITERAL_transient, LITERAL_true, LITERAL_try, LITERAL_void, LITERAL_volatile, LITERAL_while, LNOT, LOR, LPAREN, LT, MAP_CONSTRUCTOR, MEMBER_POINTER, METHOD_CALL, METHOD_DEF, MINUS, MINUS_ASSIGN, ML_COMMENT, MOD, MOD_ASSIGN, MODIFIERS, NLS, NOT_EQUAL, NULL_TREE_LOOKAHEAD, NUM_BIG_DECIMAL, NUM_BIG_INT, NUM_DOUBLE, NUM_FLOAT, NUM_INT, NUM_LONG, OBJBLOCK, ONE_NL, OPTIONAL_DOT, PACKAGE_DEF, PARAMETER_DEF, PARAMETERS, PLUS, PLUS_ASSIGN, POST_DEC, POST_INC, QUESTION, RANGE_EXCLUSIVE, RANGE_INCLUSIVE, RBRACK, RCURLY, REGEX_FIND, REGEX_MATCH, REGEXP_CTOR_END, REGEXP_LITERAL, REGEXP_SYMBOL, RPAREN, SELECT_SLOT, SEMI, SH_COMMENT, SL, SL_ASSIGN, SL_COMMENT, SLIST, SPREAD_ARG, SPREAD_DOT, SPREAD_MAP_ARG, SR, SR_ASSIGN, STAR, STAR_ASSIGN, STAR_STAR, STAR_STAR_ASSIGN, STATIC_IMPORT, STATIC_INIT, STRICTFP, STRING_CH, STRING_CONSTRUCTOR, STRING_CTOR_END, STRING_CTOR_MIDDLE, STRING_CTOR_START, STRING_LITERAL, STRING_NL, SUPER_CTOR_CALL, TRIPLE_DOT, TYPE, TYPE_ARGUMENT, TYPE_ARGUMENTS, TYPE_LOWER_BOUNDS, TYPE_PARAMETER, TYPE_PARAMETERS, TYPE_UPPER_BOUNDS, TYPECAST, UNARY_MINUS, UNARY_PLUS, UNUSED_CONST, UNUSED_DO, UNUSED_GOTO, VARIABLE_DEF, VARIABLE_PARAMETER_DEF, VOCAB, WILDCARD_TYPE, WS
 
Constructor Summary
  GroovyRecognizer(ParserSharedInputState state)
           
  GroovyRecognizer(TokenBuffer tokenBuf)
           
protected GroovyRecognizer(TokenBuffer tokenBuf, int k)
           
  GroovyRecognizer(TokenStream lexer)
           
protected GroovyRecognizer(TokenStream lexer, int k)
           
 
Method Summary
 void aCase()
           
 void additiveExpression(int lc_stmt)
           
 void addWarning(String warning, String solution)
           
 void andExpression(int lc_stmt)
           
 void annotation()
           
 void annotationArguments()
           
 void annotationBlock()
           
 void annotationDefinition(AST modifiers)
           
 void annotationField()
           
 void annotationIdent()
           
 void annotationMemberArrayValueInitializer()
           
 void annotationMemberValueInitializer()
           
 void annotationMemberValuePair()
           
 void annotationMemberValuePairs()
           
 void annotationsOpt()
           
 void appendedBlock(AST callee)
          An appended block follows any expression.
 void argList()
           
 byte argument()
          A single argument in (...) or [...].
 void argumentLabel()
          A label for an argument is of the form a:b, 'a':b, "a":b, (a):b, etc..
 void argumentLabelStart()
          For lookahead only.
 void assignmentExpression(int lc_stmt)
           
 void assignmentLessExpression()
           
 void balancedBrackets()
          Fast lookahead across balanced brackets of all sorts.
 void balancedTokens()
           
 void blockBody(int prevToken)
          A block body is a parade of zero or more statements or expressions.
 void branchStatement()
          In Groovy, return, break, continue, throw, and assert can be used in a parenthesized expression context.
protected  void buildTokenTypeASTClassMap()
           
 void builtInType()
           
 void builtInTypeArraySpec(boolean addImagNode)
           
 void builtInTypeSpec(boolean addImagNode)
           
 void casesGroup()
           
 void caseSList()
           
 void checkSuspiciousExpressionStatement(int prevToken)
          If two statements are separated by newline (not SEMI), the second had better not look like the latter half of an expression.
 void classBlock()
           
 void classDefinition(AST modifiers)
           
 void classField()
           
 void classOrInterfaceType(boolean addImagNode)
           
 void classTypeSpec(boolean addImagNode)
           
 Token cloneToken(Token t)
          Clones the token
 void closableBlock()
          A block which is known to be a closure, even if it has no apparent arguments.
 void closableBlockConstructorExpression()
           
 void closableBlockParam()
          Simple names, as in {x|...}, are completely equivalent to {(def x)|...}.
 void closableBlockParamsOpt(boolean addImplicit)
          Closure parameters are exactly like method parameters, except that they are not enclosed in parentheses, but rather are prepended to the front of a block, just after the brace.
 void closableBlockParamsStart()
          Lookahead to check whether a block begins with explicit closure arguments.
 void closureList()
           
 void commandArgument()
           
 void commandArguments(AST head)
          A member name (x.y) or element name (x[y]) can serve as a command name, which may be followed by a list of arguments.
 void compatibleBodyStatement()
          In Java, "if", "while", and "for" statements can take random, non-braced statements as their bodies.
 void compilationUnit()
           
 void compoundStatement()
           
 void conditionalExpression(int lc_stmt)
           
 void constant()
          Numeric, string, regexp, boolean, or null constant.
 void constantNumber()
          Numeric constant.
 void constructorBody()
           
 void constructorDefinition(AST mods)
          I've split out constructors separately; we could maybe integrate back into variableDefinitions later on if we maybe simplified 'def' to be a type declaration?
 void constructorStart()
          Used to look ahead for a constructor
 void controlExpressionList()
           
 AST create(int type, String txt, AST first)
          Create an AST node with the token type and text passed in, but with the same background information as another supplied Token (e.g.
 AST create(int type, String txt, AST first, AST last)
           
 AST create(int type, String txt, AST first, Token last)
           
 AST create(int type, String txt, Token first, Token last)
           
 void declaration()
          A declaration is the creation of a reference or primitive-type variable, or (if arguments are present) of a method.
 void declarationStart()
          Used only as a lookahead predicate, before diving in and parsing a declaration.
 void declaratorBrackets(AST typ)
          After some type names, where zero or more empty bracket pairs are allowed.
 void dynamicMemberName()
          If a dot is followed by a parenthesized or quoted expression, the member is computed dynamically, and the member selection is done only at runtime.
 void enumBlock()
           
 void enumConstant()
           
 void enumConstantBlock()
           
 void enumConstantField()
           
 void enumConstants()
          Comma-separated list of one or more enum constant definitions.
 void enumConstantsStart()
          Guard for enumConstants.
 void enumDefinition(AST modifiers)
           
 void equalityExpression(int lc_stmt)
           
 void exclusiveOrExpression(int lc_stmt)
           
 void explicitConstructorInvocation()
          Catch obvious constructor calls, but not the expr.super(...) calls
 void expression(int lc_stmt)
           
 void expressionStatement(int prevToken)
          An expression statement can be any general expression.
 void finallyClause()
           
 void forCond()
           
 void forInClause()
           
 void forInit()
           
 void forIter()
           
 void forStatement()
           
 void genericMethod()
           
 void genericMethodStart()
          lookahead predicate for usage of generics in methods as parameter for the method.
 GroovyLexer getLexer()
           
 List getWarningList()
           
 void handler()