Top Description Fields Constructors Methods
org.codehaus.groovy.antlr.parser

public Class GroovyRecognizer

extends LLkParser
implements GroovyTokenTypes
Class Inheritance
All Implemented Interfaces
org.codehaus.groovy.antlr.parser.GroovyTokenTypes
Imports
java.io.*, java.util.*, .Hashtable, antlr.CommonToken, .InputBuffer, .LexerSharedInputState, .TokenStreamRecognitionException, .TokenBuffer, .TokenStreamException, .TokenStreamIOException, .ANTLRException, .LLkParser, .Token, .TokenStream, .RecognitionException, .NoViableAltException, .MismatchedTokenException, .SemanticException, .ParserSharedInputState, .ASTFactory, .ASTPair, org.codehaus.groovy.antlr.*, antlr.collections.impl.BitSet, .ASTArray, antlr.collections.AST

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 [email protected] Terence Parr [email protected] John Lilley [email protected] Scott Stanchfield [email protected] Markus Mohnen [email protected] Peter Williams [email protected] Allan Jacobs [email protected] Steve Messick [email protected] James Strachan [email protected] John Pybus [email protected] John Rose [email protected] Jeremy Rayner [email protected] Alex Popescu [email protected] Martin Kempf [email protected] Reto Kleeb [email protected] 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 charVocabulary 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 that's 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) 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 Based on an original grammar released in the PUBLIC DOMAIN

Field Summary

Modifier and TypeField and Description
public static final String[]
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
public static final BitSet
private static final boolean
private boolean
private AST
private static GroovySourceAST
private AST
private final int
private final int
pack-priv GroovyLexer
private int
ltCounter

Counts the number of LT seen in the typeArguments production.

private int
public static boolean
pack-priv List<E>

Constructor Summary

AccessConstructor and Description
protected
GroovyRecognizer(TokenBuffer tokenBuf, int k)

public
protected
public
public

Method Summary

Modifier and TypeMethod and Description
public final void
public final void
additiveExpression(int lc_stmt)

public void
addWarning(String warning, String solution)

public final void
andExpression(int lc_stmt)

public final void
public final void
public final void
public final void
public final void
public final void
public final void
public final void
public final void
public final void
public final void
public final void
appendedBlock(AST callee)

An appended block follows any expression.

public final void
public final byte
argument()

A single argument in (...) or [...].

public final void
argumentLabel()

A label for an argument is of the form a:b, 'a':b, "a":b, (a):b, etc..

public final void
argumentLabelStart()

For lookahead only.

public final void
assignmentExpression(int lc_stmt)

public final void
private AST
public final void
balancedBrackets()

Fast lookahead across balanced brackets of all sorts.

public final void
public final void
blockBody(int prevToken)

A block body is a parade of zero or more statements or expressions.

public final void
branchStatement()

In Groovy, return, break, continue, throw, and assert can be used in a parenthesized expression context.

protected void
public final void
public final void
builtInTypeArraySpec(boolean addImagNode)

public final void
builtInTypeSpec(boolean addImagNode)

public final void
public final void
public final 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.

public final void
public final void
classDefinition(AST modifiers)

public final void
public final void
classOrInterfaceType(boolean addImagNode)

public final void
classTypeSpec(boolean addImagNode)

public Token
public final void
closableBlock()

A block which is known to be a closure, even if it has no apparent arguments.

public final void
public final void
closableBlockParam()

Simple names, as in {x|...}, are completely equivalent to {(def x)|...}.

public final 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.

public final void
closableBlockParamsStart()

Lookahead to check whether a block begins with explicit closure arguments.

public final void
public final void
public final 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.

public final void
public final void
compatibleBodyStatement()

In Java, "if", "while", and "for" statements can take random, non-braced statements as their bodies.

public final void
public final void
public final void
conditionalExpression(int lc_stmt)

public final void
constant()

Numeric, string, regexp, boolean, or null constant.

public final void
constantNumber()

Numeric constant.

public final void
public final 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?

public final void
constructorStart()

Used to look ahead for a constructor

public final void
public AST
create(int type, String txt, AST first)

Creates an AST node with the token type and text passed in, but with the same background information as another supplied Token (e.g. line numbers).

public AST
create(int type, String txt, Token first, Token last)

public AST
create(int type, String txt, AST first, Token last)

public AST
create(int type, String txt, AST first, AST last)

public final void
declaration()

A declaration is the creation of a reference or primitive-type variable, or (if arguments are present) of a method.

public final void
declarationStart()

Used only as a lookahead predicate, before diving in and parsing a declaration.

public final void
declaratorBrackets(AST typ)

After some type names, where zero or more empty bracket pairs are allowed.

public final 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.

public final void
public final void
public final void
public final void
protected final void
public final void
enumConstants()

Comma-separated list of one or more enum constant definitions.

public final void
public final void
enumConstantsStart()

Guard for enumConstants.

public final void
enumDefinition(AST modifiers)

public final void
equalityExpression(int lc_stmt)

public final void
exclusiveOrExpression(int lc_stmt)

public final void
explicitConstructorInvocation()

Catch obvious constructor calls, but not the expr.super(...) calls

public final void
expression(int lc_stmt)

public final void
expressionStatement(int prevToken)

An expression statement can be any general expression.

public final void
public final void
public final void
public final void
public final void
public final void
public final void
public final void
public final void
genericMethodStart()

lookahead predicate for usage of generics in methods as parameter for the method.

public GroovyLexer
public List<E>
public final void
public final void
public final void
public final void
public final void
implicitParameters()

A block known to be a closure, but which omits its arguments, is given this placeholder.

public final void
public final void
inclusiveOrExpression(int lc_stmt)

public final void
indexPropertyArgs(AST indexee)

An expression may be followed by [...].

public final void
public final void
public final void
public final void
private boolean
private boolean
public final void
public final void
listOfVariables(AST mods, AST t, Token first)

public final void
listOrMapConstructorExpression()

A list constructor is a argument list enclosed in square brackets, without labels.

public final void
logicalAndExpression(int lc_stmt)

public final void
logicalOrExpression(int lc_stmt)

public static GroovyRecognizer
make(GroovyLexer lexer)

This factory is the correct way to wire together a Groovy parser and lexer.

public static GroovyRecognizer
public static GroovyRecognizer
public static GroovyRecognizer
public static GroovyRecognizer
private boolean
matchGenericTypeBrackets(boolean z, String problem, String solution)

public void
public final void
methodCallArgs(AST callee)

An expression may be followed by one or both of (...) and {...}.

private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
private static final long[]
public final void
public final void
modifiers()

A list of one or more modifier, annotation, or "def".

public final void
public final void
modifiersOpt()

A list of zero or more modifiers, annotations, or "def".

public final void
public final void
public final void
multipleAssignment(int lc_stmt)

public final void
public final void
public final void
public final void
namePart()

This is the grammar for what can follow a dot: x.a, x.@a, x.

public final void
public final void
newExpression()

object instantiation.

public final void
nls()

Zero or more insignificant newlines, all gobbled up and thrown away.

public final void
nlsWarn()

Zero or more insignificant newlines, all gobbled up and thrown away, but a warning message is left for the user, if there was a newline.

public final void
openBlock()

An open block is not allowed to have closure arguments.

public final void
openOrClosableBlock()

A sub-block of a block can be either open or closable.

public final void
public final void
parameterDeclaration()

A formal parameter for a method or closure.

public final void
parameterDeclarationList()

A list of zero or more formal parameters.

public final void
public final void
public final void
pathChain(int lc_stmt, AST prefix)

public final void
pathElement(AST prefix)

public final void
public final void
pathExpression(int lc_stmt)

A "path expression" is a name or other primary, possibly qualified by various forms of dot, and/or followed by various kinds of brackets.

public final void
postfixExpression(int lc_stmt)

public final void
powerExpression(int lc_stmt)

public final void
public final void
public final void
public final void
regexExpression(int lc_stmt)

public final void
relationalExpression(int lc_stmt)

private void
require(boolean z, String problem, String solution)

public void
requireFailed(String problem, String solution)

public final void
sep()

A statement separator is either a semicolon or a significant newline.

public void
public void
setSourceBuffer(SourceBuffer sourceBuffer)

Deprecated
public final void
shiftExpression(int lc_stmt)

public final void
singleDeclaration()

A declaration with one declarator and optional initialization, like a parameterDeclaration.

public final void
singleDeclarationNoInit()

A declaration with one declarator and no initialization, like a parameterDeclaration.

public final void
singleVariable(AST mods, AST t)

Used in cases where a declaration cannot have commas, or ends with the "in" operator instead of '='.

public final void
snippetUnit()

A Groovy script or simple expression.

public final void
statement(int prevToken)

A statement is an element of a block.

public final void
statementLabelPrefix()

A labeled statement, consisting of a vanilla identifier followed by a colon.

public final boolean
strictContextExpression(boolean allowDeclaration)

Things that can show up as expressions, but only in strict contexts like inside parentheses, argument lists, and list constructors.

public final void
public final void
public final void
public final void
suspiciousExpressionStatementStart()

Lookahead for suspicious statement warnings and errors.

public final void
public void
public void
public final void
traitDefinition(AST modifiers)

public final void
public final void
type()

public final void
public final void
public final void
public final void
protected final void
public final void
protected final void
public final void
typeDefinitionStart()

Used only as a lookahead predicate for nested type definitions.

public final void
typeNamePairs(AST mods, Token first)

public final void
public final void
public final void
public final void
typeSpec(boolean addImagNode)

public final void
unaryExpression(int lc_stmt)

public final void
public final void
upperCaseIdent()

An IDENT token whose spelling is required to start with an uppercase letter.

public final void
variableDeclarator(AST mods, AST t, Token first)

Declaration of a variable.

public final void
variableDefinitions(AST mods, AST t)

The tail of a declaration.

public final void
public final void
varInitializer()

An assignment operator '=' followed by an expression.

public final void
Inherited from antlr.LLkParser:
consumeLALT