| org.codehaus.groovy.antlr.parser.GroovyRecognizer
GroovyRecognizer | public class GroovyRecognizer extends antlr.LLkParser implements GroovyTokenTypes(Code) | | 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
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
This grammar is in the PUBLIC DOMAIN
|
Method Summary | |
final public void | aCase() | public void | addWarning(String warning, String solution) | final public void | additiveExpression(int lc_stmt) | final public void | andExpression(int lc_stmt) | final public void | annotation() | final public void | annotationArguments() | final public void | annotationBlock() | final public void | annotationDefinition(AST modifiers) | final public void | annotationField() | final public void | annotationMemberArrayValueInitializer() | final public void | annotationMemberValueInitializer() | final public void | annotationMemberValuePair() | final public void | annotationsOpt() | final public void | anntotationMemberValuePairs() | final public void | appendedBlock(AST callee) An appended block follows any expression. | final public void | argList() | final public boolean | argument() A single argument in (...) or [...]. | final public void | argumentLabel() A label for an argument is of the form a:b, 'a':b, "a":b, (a):b, etc.. | final public void | argumentLabelStart() For lookahead only. | final public void | assignmentExpression(int lc_stmt) | final public void | assignmentLessExpression() | final public void | balancedBrackets() Fast lookahead across balanced brackets of all sorts. | final public void | balancedTokens() | final public void | blockBody(int prevToken) A block body is a parade of zero or more statements or expressions. | final public void | branchStatement() In Groovy, return, break, continue, throw, and assert can be used in a parenthesized expression context. | protected void | buildTokenTypeASTClassMap() | final public void | builtInType() | final public void | builtInTypeArraySpec(boolean addImagNode) | final public void | builtInTypeSpec(boolean addImagNode) | final public void | caseSList() | final public void | casesGroup() | final public 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. | final public void | classBlock() | final public void | classDefinition(AST modifiers) | final public void | classField() | final public void | classOrInterfaceType(boolean addImagNode) | final public void | classTypeSpec(boolean addImagNode) | final public void | closableBlock() A block which is known to be a closure, even if it has no apparent arguments. | final public void | closableBlockConstructorExpression() | final public void | closableBlockParam() Simple names, as in {x|...}, are completely equivalent to {(def x)|...}. | final public 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. | final public void | closableBlockParamsStart() Lookahead to check whether a block begins with explicit closure arguments. | final public 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. | final public void | compatibleBodyStatement() In Java, "if", "while", and "for" statements can take random, non-braced statements as their bodies. | final public void | compilationUnit() | final public void | compoundStatement() | final public void | conditionalExpression(int lc_stmt) | final public void | constant() Numeric, string, regexp, boolean, or null constant. | final public void | constantNumber() Numeric constant. | final public void | constructorBody() | final public void | constructorDefinition(AST mods) | final public void | constructorStart() | final public void | controlExpressionList() | public AST | create(int type, String txt, Token first, Token last) Create an AST node with the token type and text passed in, but
with the same background information as another supplied Token (e.g. | final public void | declaration() A declaration is the creation of a reference or primitive-type variable,
or (if arguments are present) of a method. | final public void | declarationStart() Used only as a lookahead predicate, before diving in and parsing a declaration.
A declaration can be unambiguously introduced with "def", an annotation or a modifier token like "final".
It may also be introduced by a simple identifier whose first character is an uppercase letter,
as in {String x}. | final public void | declaratorBrackets(AST typ) After some type names, where zero or more empty bracket pairs are allowed. | final public 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. | final public void | enumBlock() | final public void | enumConstant() | final public void | enumConstantBlock() | final public void | enumConstantField() | final public void | enumConstants() Comma-separated list of one or more enum constant definitions. | final public void | enumConstantsStart() Guard for enumConstants. | final public void | enumDefinition(AST modifiers) | final public void | equalityExpression(int lc_stmt) | final public void | exclusiveOrExpression(int lc_stmt) | final public void | explicitConstructorInvocation() | final public void | expression(int lc_stmt) | final public void | expressionStatement(int prevToken) An expression statement can be any general expression. | final public void | finallyClause() | final public void | forCond() | final public void | forInClause() | final public void | forInit() | final public void | forIter() | final public void | forStatement() | public GroovyLexer | getLexer() | public List | getWarningList() | final public void | handler() | final public void | identifier() | final public void | identifierStar() | final public void | implementsClause() | final public void | implicitParameters() A block known to be a closure, but which omits its arguments, is given this placeholder. | final public void | importStatement() | final public void | inclusiveOrExpression(int lc_stmt) | final public void | indexPropertyArgs(AST indexee) An expression may be followed by [...].
Unlike Java, these brackets may contain a general argument list,
which is passed to the array element operator, which can make of it what it wants.
The brackets may also be empty, as in T[]. | final public void | interfaceBlock() | final public void | interfaceDefinition(AST modifiers) | final public void | interfaceExtends() | final public void | interfaceField() | final public void | keywordPropertyNames() Allowed keywords after dot (as a member name) and before colon (as a label). | final public void | listOrMapConstructorExpression() A list constructor is a argument list enclosed in square brackets, without labels. | final public void | logicalAndExpression(int lc_stmt) | final public 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 | make(InputStream in) | public static GroovyRecognizer | make(Reader in) | public static GroovyRecognizer | make(InputBuffer in) | public static GroovyRecognizer | make(LexerSharedInputState in) | final public void | methodCallArgs(AST callee) An expression may be followed by one or both of (...) and {...}. | final public void | modifier() | final public void | modifiers() A list of one or more modifier, annotation, or "def". | final public void | modifiersInternal() | final public void | modifiersOpt() A list of zero or more modifiers, annotations, or "def". | final public void | multiplicativeExpression(int lc_stmt) | final public void | namePart() This is the grammar for what can follow a dot: x.a, x.@a, x.&a, x.'a', etc. | final public void | newArrayDeclarator() | final public void | newExpression() object instantiation.
Trees are built as illustrated by the following input/tree pairs:
new T()
new
|
T -- ELIST
|
arg1 -- arg2 -- .. | final public void | nls() Zero or more insignificant newlines, all gobbled up and thrown away. | final public 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. | final public void | openBlock() An open block is not allowed to have closure arguments. | final public void | openOrClosableBlock() A sub-block of a block can be either open or closable. | final public void | packageDefinition() | final public void | parameterDeclaration() A formal parameter for a method or closure. | final public void | parameterDeclarationList() A list of zero or more formal parameters.
If a parameter is variable length (e.g. | final public void | parameterModifiersOpt() | final public void | parenthesizedExpression() | final public void | pathElement(AST prefix) | final public void | pathElementStart() | final public 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. | final public void | postfixExpression(int lc_stmt) | final public void | powerExpression(int lc_stmt) | final public void | powerExpressionNotPlusMinus(int lc_stmt) | final public void | primaryExpression() | final public void | qualifiedTypeName() | final public void | regexExpression(int lc_stmt) | final public void | relationalExpression(int lc_stmt) | public void | requireFailed(String problem, String solution) | final public void | scopeEscapeExpression() | final public void | sep() A statement separator is either a semicolon or a significant newline. | public void | setFilename(String f) | public void | setSourceBuffer(SourceBuffer sourceBuffer) | final public void | shiftExpression(int lc_stmt) | final public void | singleDeclaration() A declaration with one declarator and optional initialization, like a parameterDeclaration. | final public void | singleDeclarationNoInit() A declaration with one declarator and no initialization, like a parameterDeclaration. | final public void | singleVariable(AST mods, AST t) Used in cases where a declaration cannot have commas, or ends with the "in" operator instead of '='. | final public void | snippetUnit() A Groovy script or simple expression. | final public void | statement(int prevToken) A statement is an element of a block. | final public void | statementLabelPrefix() A labeled statement, consisting of a vanilla identifier followed by a colon. | final public void | strictContextExpression() Things that can show up as expressions, but only in strict
contexts like inside parentheses, argument lists, and list constructors. | final public void | stringConstructorExpression() | final public void | stringConstructorValuePart() | final public void | superClassClause() | final public void | suspiciousExpressionStatementStart() Lookahead for suspicious statement warnings and errors. | final public void | throwsClause() | public void | traceIn(String rname) | public void | traceOut(String rname) | final public void | traditionalForClause() | final public void | tryBlock() | final public void | type() | final public void | typeArgument() | final public void | typeArgumentBounds() | final public void | typeArgumentSpec() | final public void | typeArguments() | final protected void | typeArgumentsOrParametersEnd() | final public void | typeDeclarationStart() Used only as a lookahead predicate for nested type declarations. | final protected void | typeDefinitionInternal(AST mods) | final public void | typeParameter() | final public void | typeParameterBounds() | final public void | typeParameters() | final public void | typeSpec(boolean addImagNode) | final public void | unaryExpression(int lc_stmt) | final public void | unaryExpressionNotPlusMinus(int lc_stmt) | final public void | upperCaseIdent() An IDENT token whose spelling is required to start with an uppercase letter. | final public void | varInitializer() An assignment operator '=' followed by an expression. | final public void | variableDeclarator(AST mods, AST t) Declaration of a variable. | final public void | variableDefinitions(AST mods, AST t) The tail of a declaration.
Either v1, v2, ... | final public void | variableName() | final public void | wildcardType() |
tracing | public static boolean tracing(Code) | | |
GroovyRecognizer | protected GroovyRecognizer(TokenBuffer tokenBuf, int k)(Code) | | |
GroovyRecognizer | public GroovyRecognizer(TokenBuffer tokenBuf)(Code) | | |
GroovyRecognizer | protected GroovyRecognizer(TokenStream lexer, int k)(Code) | | |
GroovyRecognizer | public GroovyRecognizer(TokenStream lexer)(Code) | | |
GroovyRecognizer | public GroovyRecognizer(ParserSharedInputState state)(Code) | | |
aCase | final public void aCase() throws RecognitionException, TokenStreamException(Code) | | |
additiveExpression | final public void additiveExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
andExpression | final public void andExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
annotation | final public void annotation() throws RecognitionException, TokenStreamException(Code) | | |
annotationArguments | final public void annotationArguments() throws RecognitionException, TokenStreamException(Code) | | |
annotationBlock | final public void annotationBlock() throws RecognitionException, TokenStreamException(Code) | | |
annotationDefinition | final public void annotationDefinition(AST modifiers) throws RecognitionException, TokenStreamException(Code) | | |
annotationField | final public void annotationField() throws RecognitionException, TokenStreamException(Code) | | |
annotationMemberArrayValueInitializer | final public void annotationMemberArrayValueInitializer() throws RecognitionException, TokenStreamException(Code) | | |
annotationMemberValueInitializer | final public void annotationMemberValueInitializer() throws RecognitionException, TokenStreamException(Code) | | |
annotationMemberValuePair | final public void annotationMemberValuePair() throws RecognitionException, TokenStreamException(Code) | | |
annotationsOpt | final public void annotationsOpt() throws RecognitionException, TokenStreamException(Code) | | |
anntotationMemberValuePairs | final public void anntotationMemberValuePairs() throws RecognitionException, TokenStreamException(Code) | | |
appendedBlock | final public void appendedBlock(AST callee) throws RecognitionException, TokenStreamException(Code) | | An appended block follows any expression.
If the expression is not a method call, it is given an empty argument list.
|
argList | final public void argList() throws RecognitionException, TokenStreamException(Code) | | |
argument | final public boolean argument() throws RecognitionException, TokenStreamException(Code) | | A single argument in (...) or [...]. Corresponds to to a method or closure parameter.
May be labeled. May be modified by the spread operator '*' ('*:' for keywords).
|
argumentLabel | final public void argumentLabel() throws RecognitionException, TokenStreamException(Code) | | A label for an argument is of the form a:b, 'a':b, "a":b, (a):b, etc..
The labels in (a:b), ('a':b), and ("a":b) are in all ways equivalent,
except that the quotes allow more spellings.
Equivalent dynamically computed labels are (('a'):b) and ("${'a'}":b)
but not ((a):b) or "$a":b, since the latter cases evaluate (a) as a normal identifier.
Bottom line: If you want a truly variable label, use parens and say ((a):b).
|
argumentLabelStart | final public void argumentLabelStart() throws RecognitionException, TokenStreamException(Code) | | For lookahead only. Fast approximate parse of an argumentLabel followed by a colon.
|
assignmentExpression | final public void assignmentExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
assignmentLessExpression | final public void assignmentLessExpression() throws RecognitionException, TokenStreamException(Code) | | |
balancedBrackets | final public void balancedBrackets() throws RecognitionException, TokenStreamException(Code) | | Fast lookahead across balanced brackets of all sorts.
|
balancedTokens | final public void balancedTokens() throws RecognitionException, TokenStreamException(Code) | | |
blockBody | final public void blockBody(int prevToken) throws RecognitionException, TokenStreamException(Code) | | A block body is a parade of zero or more statements or expressions.
|
branchStatement | final public void branchStatement() throws RecognitionException, TokenStreamException(Code) | | In Groovy, return, break, continue, throw, and assert can be used in a parenthesized expression context.
Example: println (x || (return)); println assert x, "won't print a false value!"
If an optional expression is missing, its value is void (this coerces to null when a value is required).
|
buildTokenTypeASTClassMap | protected void buildTokenTypeASTClassMap()(Code) | | |
builtInType | final public void builtInType() throws RecognitionException, TokenStreamException(Code) | | |
builtInTypeArraySpec | final public void builtInTypeArraySpec(boolean addImagNode) throws RecognitionException, TokenStreamException(Code) | | |
builtInTypeSpec | final public void builtInTypeSpec(boolean addImagNode) throws RecognitionException, TokenStreamException(Code) | | |
caseSList | final public void caseSList() throws RecognitionException, TokenStreamException(Code) | | |
casesGroup | final public void casesGroup() throws RecognitionException, TokenStreamException(Code) | | |
checkSuspiciousExpressionStatement | final public void checkSuspiciousExpressionStatement(int prevToken) throws RecognitionException, TokenStreamException(Code) | | If two statements are separated by newline (not SEMI), the second had
better not look like the latter half of an expression. If it does, issue a warning.
Also, if the expression starts with a closure, it needs to
have an explicit parameter list, in order to avoid the appearance of a
compound statement. This is a hard error.
These rules are different from Java's "dumb expression" restriction.
Unlike Java, Groovy blocks can end with arbitrary (even dumb) expressions,
as a consequence of optional 'return' and 'continue' tokens.
To make the programmer's intention clear, a leading closure must have an
explicit parameter list, and must not follow a previous statement separated
only by newlines.
|
classBlock | final public void classBlock() throws RecognitionException, TokenStreamException(Code) | | |
classDefinition | final public void classDefinition(AST modifiers) throws RecognitionException, TokenStreamException(Code) | | |
classField | final public void classField() throws RecognitionException, TokenStreamException(Code) | | |
classOrInterfaceType | final public void classOrInterfaceType(boolean addImagNode) throws RecognitionException, TokenStreamException(Code) | | |
classTypeSpec | final public void classTypeSpec(boolean addImagNode) throws RecognitionException, TokenStreamException(Code) | | |
closableBlock | final public void closableBlock() throws RecognitionException, TokenStreamException(Code) | | A block which is known to be a closure, even if it has no apparent arguments.
A block inside an expression or after a method call is always assumed to be a closure.
Only labeled, unparameterized blocks which occur directly as substatements are kept open.
|
closableBlockConstructorExpression | final public void closableBlockConstructorExpression() throws RecognitionException, TokenStreamException(Code) | | |
closableBlockParam | final public void closableBlockParam() throws RecognitionException, TokenStreamException(Code) | | Simple names, as in {x|...}, are completely equivalent to {(def x)|...}. Build the right AST.
|
closableBlockParamsOpt | final public void closableBlockParamsOpt(boolean addImplicit) throws RecognitionException, TokenStreamException(Code) | | 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.
They are separated from the closure body by a CLOSABLE_BLOCK_OP token '->'.
|
closableBlockParamsStart | final public void closableBlockParamsStart() throws RecognitionException, TokenStreamException(Code) | | Lookahead to check whether a block begins with explicit closure arguments.
|
commandArguments | final public void commandArguments(AST head) throws RecognitionException, TokenStreamException(Code) | | 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.
Unlike parenthesized arguments, these must be plain expressions,
without labels or spread operators.
|
compatibleBodyStatement | final public void compatibleBodyStatement() throws RecognitionException, TokenStreamException(Code) | | In Java, "if", "while", and "for" statements can take random, non-braced statements as their bodies.
Support this practice, even though it isn't very Groovy.
|
compilationUnit | final public void compilationUnit() throws RecognitionException, TokenStreamException(Code) | | |
compoundStatement | final public void compoundStatement() throws RecognitionException, TokenStreamException(Code) | | |
conditionalExpression | final public void conditionalExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
constant | final public void constant() throws RecognitionException, TokenStreamException(Code) | | Numeric, string, regexp, boolean, or null constant.
|
constantNumber | final public void constantNumber() throws RecognitionException, TokenStreamException(Code) | | Numeric constant.
|
constructorBody | final public void constructorBody() throws RecognitionException, TokenStreamException(Code) | | |
constructorDefinition | final public void constructorDefinition(AST mods) throws RecognitionException, TokenStreamException(Code) | | 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?
|
constructorStart | final public void constructorStart() throws RecognitionException, TokenStreamException(Code) | | Used to look ahead for a constructor
|
controlExpressionList | final public void controlExpressionList() throws RecognitionException, TokenStreamException(Code) | | |
create | public AST create(int type, String txt, Token first, Token last)(Code) | | Create 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)
to be used in place of antlr tree construction syntax,
i.e. #[TOKEN,"text"] becomes create(TOKEN,"text",anotherToken)
todo - change antlr.ASTFactory to do this instead...
|
declaration | final public void declaration() throws RecognitionException, TokenStreamException(Code) | | A declaration is the creation of a reference or primitive-type variable,
or (if arguments are present) of a method.
Generically, this is called a 'variable' definition, even in the case of a class field or method.
It may start with the modifiers and/or a declaration keyword "def".
It may also start with the modifiers and a capitalized type name.
AST effect: Create a separate Type/Var tree for each var in the var list.
Must be guarded, as in (declarationStart) => declaration.
|
declarationStart | final public void declarationStart() throws RecognitionException, TokenStreamException(Code) | | Used only as a lookahead predicate, before diving in and parsing a declaration.
A declaration can be unambiguously introduced with "def", an annotation or a modifier token like "final".
It may also be introduced by a simple identifier whose first character is an uppercase letter,
as in {String x}. A declaration can also be introduced with a built in type like 'int' or 'void'.
Brackets (array and generic) are allowed, as in {List[] x} or {int[][] y}.
Anything else is parsed as a statement of some sort (expression or command).
(In the absence of explicit method-call parens, we assume a capitalized name is a type name.
Yes, this is a little hacky. Alternatives are to complicate the declaration or command
syntaxes, or to have the parser query the symbol table. Parse-time queries are evil.
And we want both {String x} and {println x}. So we need a syntactic razor-edge to slip
between 'println' and 'String'.)
TODO* The declarationStart production needs to be strengthened to recognize
things like {List foo}.
Right now it only knows how to skip square brackets after the type, not
angle brackets.
This probably turns out to be tricky because of >> vs. > >. If so,
just put a TODO comment in.
|
declaratorBrackets | final public void declaratorBrackets(AST typ) throws RecognitionException, TokenStreamException(Code) | | After some type names, where zero or more empty bracket pairs are allowed.
We use ARRAY_DECLARATOR to represent this.
TODO: Is there some more Groovy way to view this in terms of the indexed property syntax?
|
dynamicMemberName | final public void dynamicMemberName() throws RecognitionException, TokenStreamException(Code) | | 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. This forces a statically unchecked member access.
|
enumBlock | final public void enumBlock() throws RecognitionException, TokenStreamException(Code) | | |
enumConstant | final public void enumConstant() throws RecognitionException, TokenStreamException(Code) | | |
enumConstantBlock | final public void enumConstantBlock() throws RecognitionException, TokenStreamException(Code) | | |
enumConstantField | final public void enumConstantField() throws RecognitionException, TokenStreamException(Code) | | |
enumConstants | final public void enumConstants() throws RecognitionException, TokenStreamException(Code) | | Comma-separated list of one or more enum constant definitions.
|
enumConstantsStart | final public void enumConstantsStart() throws RecognitionException, TokenStreamException(Code) | | Guard for enumConstants.
|
enumDefinition | final public void enumDefinition(AST modifiers) throws RecognitionException, TokenStreamException(Code) | | |
equalityExpression | final public void equalityExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
exclusiveOrExpression | final public void exclusiveOrExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
explicitConstructorInvocation | final public void explicitConstructorInvocation() throws RecognitionException, TokenStreamException(Code) | | Catch obvious constructor calls, but not the expr.super(...) calls
|
expression | final public void expression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
expressionStatement | final public void expressionStatement(int prevToken) throws RecognitionException, TokenStreamException(Code) | | An expression statement can be any general expression.
An expression statement can also be a command,
which is a simple method call in which the outermost parentheses are omitted.
Certain "suspicious" looking forms are flagged for the user to disambiguate.
|
finallyClause | final public void finallyClause() throws RecognitionException, TokenStreamException(Code) | | |
forCond | final public void forCond() throws RecognitionException, TokenStreamException(Code) | | |
forInClause | final public void forInClause() throws RecognitionException, TokenStreamException(Code) | | |
forInit | final public void forInit() throws RecognitionException, TokenStreamException(Code) | | |
forIter | final public void forIter() throws RecognitionException, TokenStreamException(Code) | | |
forStatement | final public void forStatement() throws RecognitionException, TokenStreamException(Code) | | |
handler | final public void handler() throws RecognitionException, TokenStreamException(Code) | | |
identifier | final public void identifier() throws RecognitionException, TokenStreamException(Code) | | |
identifierStar | final public void identifierStar() throws RecognitionException, TokenStreamException(Code) | | |
implementsClause | final public void implementsClause() throws RecognitionException, TokenStreamException(Code) | | |
implicitParameters | final public void implicitParameters() throws RecognitionException, TokenStreamException(Code) | | A block known to be a closure, but which omits its arguments, is given this placeholder.
A subsequent pass is responsible for deciding if there is an implicit 'it' parameter,
or if the parameter list should be empty.
|
importStatement | final public void importStatement() throws RecognitionException, TokenStreamException(Code) | | |
inclusiveOrExpression | final public void inclusiveOrExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
indexPropertyArgs | final public void indexPropertyArgs(AST indexee) throws RecognitionException, TokenStreamException(Code) | | An expression may be followed by [...].
Unlike Java, these brackets may contain a general argument list,
which is passed to the array element operator, which can make of it what it wants.
The brackets may also be empty, as in T[]. This is how Groovy names array types.
Returned AST is [INDEX_OP, indexee, ELIST].
|
interfaceBlock | final public void interfaceBlock() throws RecognitionException, TokenStreamException(Code) | | |
interfaceDefinition | final public void interfaceDefinition(AST modifiers) throws RecognitionException, TokenStreamException(Code) | | |
interfaceExtends | final public void interfaceExtends() throws RecognitionException, TokenStreamException(Code) | | |
interfaceField | final public void interfaceField() throws RecognitionException, TokenStreamException(Code) | | |
keywordPropertyNames | final public void keywordPropertyNames() throws RecognitionException, TokenStreamException(Code) | | Allowed keywords after dot (as a member name) and before colon (as a label).
TODO: What's the rationale for these?
|
listOrMapConstructorExpression | final public void listOrMapConstructorExpression() throws RecognitionException, TokenStreamException(Code) | | A list constructor is a argument list enclosed in square brackets, without labels.
Any argument can be decorated with a spread operator (*x), but not a label (a:x).
Examples: [], [1], [1,2], [1,*l1,2], [*l1,*l2].
(The l1, l2 must be a sequence or null.)
A map constructor is an argument list enclosed in square brackets, with labels everywhere,
except on spread arguments, which stand for whole maps spliced in.
A colon alone between the brackets also forces the expression to be an empty map constructor.
Examples: [:], [a:1], [a:1,b:2], [a:1,*:m1,b:2], [*:m1,*:m2]
(The m1, m2 must be a map or null.)
Values associated with identical keys overwrite from left to right:
[a:1,a:2] === [a:2]
Some malformed constructor expressions are not detected in the parser, but in a post-pass.
Bad examples: [1,b:2], [a:1,2], [:1].
(Note that method call arguments, by contrast, can be a mix of keyworded and non-keyworded arguments.)
|
logicalAndExpression | final public void logicalAndExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
logicalOrExpression | final public void logicalOrExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
methodCallArgs | final public void methodCallArgs(AST callee) throws RecognitionException, TokenStreamException(Code) | | An expression may be followed by one or both of (...) and {...}.
Note: If either is (...) or {...} present, it is a method call.
The {...} is appended to the argument list, and matches a formal of type Closure.
If there is no method member, a property (or field) is used instead, and must itself be callable.
If the methodCallArgs are absent, it is a property reference.
If there is no property, it is treated as a field reference, but never a method reference.
Arguments in the (...) can be labeled, and the appended block can be labeled also.
If there is a mix of unlabeled and labeled arguments,
all the labeled arguments must follow the unlabeled arguments,
except that the closure (labeled or not) is always a separate final argument.
Labeled arguments are collected up and passed as a single argument to a formal of type Map.
Therefore, f(x,y, a:p, b:q) {s} is equivalent in all ways to f(x,y, [a:p,b:q], {s}).
Spread arguments of sequence type count as unlabeled arguments,
while spread arguments of map type count as labeled arguments.
(This distinction must sometimes be checked dynamically.)
A plain unlabeled argument is allowed to match a trailing Map or Closure argument:
f(x, a:p) {s} === f(*[ x, [a:p], {s} ])
|
modifier | final public void modifier() throws RecognitionException, TokenStreamException(Code) | | |
modifiers | final public void modifiers() throws RecognitionException, TokenStreamException(Code) | | A list of one or more modifier, annotation, or "def".
|
modifiersInternal | final public void modifiersInternal() throws RecognitionException, TokenStreamException(Code) | | |
modifiersOpt | final public void modifiersOpt() throws RecognitionException, TokenStreamException(Code) | | A list of zero or more modifiers, annotations, or "def".
|
multiplicativeExpression | final public void multiplicativeExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
namePart | final public void namePart() throws RecognitionException, TokenStreamException(Code) | | This is the grammar for what can follow a dot: x.a, x.@a, x.&a, x.'a', etc.
Note: typeArguments is handled by the caller of namePart .
|
newArrayDeclarator | final public void newArrayDeclarator() throws RecognitionException, TokenStreamException(Code) | | |
newExpression | final public void newExpression() throws RecognitionException, TokenStreamException(Code) | | object instantiation.
Trees are built as illustrated by the following input/tree pairs:
new T()
new
|
T -- ELIST
|
arg1 -- arg2 -- .. -- argn
new int[]
new
|
int -- ARRAY_DECLARATOR
new int[] {1,2}
new
|
int -- ARRAY_DECLARATOR -- ARRAY_INIT
|
EXPR -- EXPR
| |
1 2
new int[3]
new
|
int -- ARRAY_DECLARATOR
|
EXPR
|
3
new int[1][2]
new
|
int -- ARRAY_DECLARATOR
|
ARRAY_DECLARATOR -- EXPR
| |
EXPR 1
|
2
|
nls | final public void nls() throws RecognitionException, TokenStreamException(Code) | | Zero or more insignificant newlines, all gobbled up and thrown away.
|
nlsWarn | final public void nlsWarn() throws RecognitionException, TokenStreamException(Code) | | 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.
|
openBlock | final public void openBlock() throws RecognitionException, TokenStreamException(Code) | | An open block is not allowed to have closure arguments.
|
openOrClosableBlock | final public void openOrClosableBlock() throws RecognitionException, TokenStreamException(Code) | | A sub-block of a block can be either open or closable.
It is closable if and only if there are explicit closure arguments.
Compare this to a block which is appended to a method call,
which is given closure arguments, even if they are not explicit in the code.
|
packageDefinition | final public void packageDefinition() throws RecognitionException, TokenStreamException(Code) | | |
parameterDeclaration | final public void parameterDeclaration() throws RecognitionException, TokenStreamException(Code) | | A formal parameter for a method or closure.
|
parameterDeclarationList | final public void parameterDeclarationList() throws RecognitionException, TokenStreamException(Code) | | A list of zero or more formal parameters.
If a parameter is variable length (e.g. String... myArg) it should be
to the right of any other parameters of the same kind.
General form: (req, ..., opt, ..., [rest], key, ..., [restKeys], [block]
This must be sorted out after parsing, since the various declaration forms
are impossible to tell apart without backtracking.
|
parameterModifiersOpt | final public void parameterModifiersOpt() throws RecognitionException, TokenStreamException(Code) | | |
parenthesizedExpression | final public void parenthesizedExpression() throws RecognitionException, TokenStreamException(Code) | | |
pathElement | final public void pathElement(AST prefix) throws RecognitionException, TokenStreamException(Code) | | |
pathElementStart | final public void pathElementStart() throws RecognitionException, TokenStreamException(Code) | | |
pathExpression | final public void pathExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | A "path expression" is a name or other primary, possibly qualified by various
forms of dot, and/or followed by various kinds of brackets.
It can be used for value or assigned to, or else further qualified, indexed, or called.
It is called a "path" because it looks like a linear path through a data structure.
Examples: x.y, x?.y, x*.y, x.@y; x[], x[y], x[y,z]; x(), x(y), x(y,z); x{s}; a.b[n].c(x).d{s}
(Compare to a C lvalue, or LeftHandSide in the JLS section 15.26.)
General expressions are built up from path expressions, using operators like '+' and '='.
|
postfixExpression | final public void postfixExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
powerExpression | final public void powerExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
powerExpressionNotPlusMinus | final public void powerExpressionNotPlusMinus(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
primaryExpression | final public void primaryExpression() throws RecognitionException, TokenStreamException(Code) | | |
qualifiedTypeName | final public void qualifiedTypeName() throws RecognitionException, TokenStreamException(Code) | | Not yet used - but we could use something like this to look for fully qualified type names
|
regexExpression | final public void regexExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
relationalExpression | final public void relationalExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
requireFailed | public void requireFailed(String problem, String solution) throws SemanticException(Code) | | |
scopeEscapeExpression | final public void scopeEscapeExpression() throws RecognitionException, TokenStreamException(Code) | | |
sep | final public void sep() throws RecognitionException, TokenStreamException(Code) | | A statement separator is either a semicolon or a significant newline.
Any number of additional (insignificant) newlines may accompany it.
|
shiftExpression | final public void shiftExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
singleDeclaration | final public void singleDeclaration() throws RecognitionException, TokenStreamException(Code) | | A declaration with one declarator and optional initialization, like a parameterDeclaration.
Used to parse declarations used for both binding and effect, in places like argument
lists and while statements.
|
singleDeclarationNoInit | final public void singleDeclarationNoInit() throws RecognitionException, TokenStreamException(Code) | | A declaration with one declarator and no initialization, like a parameterDeclaration.
Used to parse loops like for (int x in y) (up to the in keyword).
|
singleVariable | final public void singleVariable(AST mods, AST t) throws RecognitionException, TokenStreamException(Code) | | Used in cases where a declaration cannot have commas, or ends with the "in" operator instead of '='.
|
snippetUnit | final public void snippetUnit() throws RecognitionException, TokenStreamException(Code) | | A Groovy script or simple expression. Can be anything legal inside {...}.
|
statement | final public void statement(int prevToken) throws RecognitionException, TokenStreamException(Code) | | A statement is an element of a block.
Typical statements are declarations (which are scoped to the block)
and expressions.
|
statementLabelPrefix | final public void statementLabelPrefix() throws RecognitionException, TokenStreamException(Code) | | A labeled statement, consisting of a vanilla identifier followed by a colon.
|
strictContextExpression | final public void strictContextExpression() throws RecognitionException, TokenStreamException(Code) | | Things that can show up as expressions, but only in strict
contexts like inside parentheses, argument lists, and list constructors.
|
stringConstructorExpression | final public void stringConstructorExpression() throws RecognitionException, TokenStreamException(Code) | | |
stringConstructorValuePart | final public void stringConstructorValuePart() throws RecognitionException, TokenStreamException(Code) | | |
superClassClause | final public void superClassClause() throws RecognitionException, TokenStreamException(Code) | | |
suspiciousExpressionStatementStart | final public void suspiciousExpressionStatementStart() throws RecognitionException, TokenStreamException(Code) | | Lookahead for suspicious statement warnings and errors.
|
throwsClause | final public void throwsClause() throws RecognitionException, TokenStreamException(Code) | | |
traceIn | public void traceIn(String rname) throws TokenStreamException(Code) | | |
traceOut | public void traceOut(String rname) throws TokenStreamException(Code) | | |
traditionalForClause | final public void traditionalForClause() throws RecognitionException, TokenStreamException(Code) | | |
tryBlock | final public void tryBlock() throws RecognitionException, TokenStreamException(Code) | | |
type | final public void type() throws RecognitionException, TokenStreamException(Code) | | |
typeArgument | final public void typeArgument() throws RecognitionException, TokenStreamException(Code) | | |
typeArgumentBounds | final public void typeArgumentBounds() throws RecognitionException, TokenStreamException(Code) | | |
typeArgumentSpec | final public void typeArgumentSpec() throws RecognitionException, TokenStreamException(Code) | | |
typeArguments | final public void typeArguments() throws RecognitionException, TokenStreamException(Code) | | |
typeArgumentsOrParametersEnd | final protected void typeArgumentsOrParametersEnd() throws RecognitionException, TokenStreamException(Code) | | |
typeDeclarationStart | final public void typeDeclarationStart() throws RecognitionException, TokenStreamException(Code) | | Used only as a lookahead predicate for nested type declarations.
|
typeDefinitionInternal | final protected void typeDefinitionInternal(AST mods) throws RecognitionException, TokenStreamException(Code) | | |
typeParameter | final public void typeParameter() throws RecognitionException, TokenStreamException(Code) | | |
typeParameterBounds | final public void typeParameterBounds() throws RecognitionException, TokenStreamException(Code) | | |
typeParameters | final public void typeParameters() throws RecognitionException, TokenStreamException(Code) | | |
typeSpec | final public void typeSpec(boolean addImagNode) throws RecognitionException, TokenStreamException(Code) | | |
unaryExpression | final public void unaryExpression(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
unaryExpressionNotPlusMinus | final public void unaryExpressionNotPlusMinus(int lc_stmt) throws RecognitionException, TokenStreamException(Code) | | |
upperCaseIdent | final public void upperCaseIdent() throws RecognitionException, TokenStreamException(Code) | | An IDENT token whose spelling is required to start with an uppercase letter.
In the case of a simple statement {UpperID name} the identifier is taken to be a type name, not a command name.
|
varInitializer | final public void varInitializer() throws RecognitionException, TokenStreamException(Code) | | An assignment operator '=' followed by an expression. (Never empty.)
|
variableDeclarator | final public void variableDeclarator(AST mods, AST t) throws RecognitionException, TokenStreamException(Code) | | Declaration of a variable. This can be a class/instance variable,
or a local variable in a method
It can also include possible initialization.
|
variableDefinitions | final public void variableDefinitions(AST mods, AST t) throws RecognitionException, TokenStreamException(Code) | | The tail of a declaration.
Either v1, v2, ... (with possible initializers) or else m(args){body}.
The two arguments are the modifier list (if any) and the declaration head (if any).
The declaration head is the variable type, or (for a method) the return type.
If it is missing, then the variable type is taken from its initializer (if there is one).
Otherwise, the variable type defaults to 'any'.
DECIDE: Method return types default to the type of the method body, as an expression.
|
variableName | final public void variableName() throws RecognitionException, TokenStreamException(Code) | | |
wildcardType | final public void wildcardType() throws RecognitionException, TokenStreamException(Code) | | |
|
|