blob: 45d575d145c7d07ff0cfbbca4ea27e1e94d54052 [file] [log] [blame]
Index: groovy.g
===================================================================
RCS file: /home/projects/groovy/scm/groovy/groovy-core/src/main/org/codehaus/groovy/antlr/groovy.g,v
retrieving revision 1.24
diff -c -r1.24 groovy.g
*** groovy.g 13 Apr 2005 21:45:54 -0000 1.24
--- groovy.g 19 Apr 2005 21:32:05 -0000
***************
*** 387,393 ****
// Package statement: optional annotations followed by "package" then the package identifier.
packageDefinition
//TODO? options {defaultErrorHandler = true;} // let ANTLR handle errors
! : annotationsOpt p:"package"^ {#p.setType(PACKAGE_DEF);} identifier
;
--- 387,393 ----
// Package statement: optional annotations followed by "package" then the package identifier.
packageDefinition
//TODO? options {defaultErrorHandler = true;} // let ANTLR handle errors
! : annotationsOpt "package"! ^[PACKAGE_DEF,"package"]^ identifier
;
***************
*** 602,608 ****
// Wildcard type indicating all types (with possible constraint)
wildcardType
! : q:QUESTION^ {#q.setType(WILDCARD_TYPE);}
(("extends" | "super")=> typeArgumentBounds)?
;
--- 602,608 ----
// Wildcard type indicating all types (with possible constraint)
wildcardType
! : QUESTION! ^[WILDCARD_TYPE,"?"]^
(("extends" | "super")=> typeArgumentBounds)?
;
***************
*** 808,814 ****
/*OBS*
// This is an initializer used to set up an annotation member array.
annotationMemberArrayInitializer
! : lc:LCURLY^ {#lc.setType(ANNOTATION_ARRAY_INIT);}
( annotationMemberArrayValueInitializer
(
// CONFLICT: does a COMMA after an initializer start a new
--- 808,814 ----
/*OBS*
// This is an initializer used to set up an annotation member array.
annotationMemberArrayInitializer
! : LCURLY! ^[ANNOTATION_ARRAY_INIT,"{"]^
( annotationMemberArrayValueInitializer
(
// CONFLICT: does a COMMA after an initializer start a new
***************
*** 1143,1149 ****
;
constructorBody
! : lc:LCURLY^ nls! {#lc.setType(SLIST);}
( (explicitConstructorInvocation) => // Java compatibility hack
explicitConstructorInvocation (sep! blockBody[sepToken])?
| blockBody[EOF]
--- 1143,1149 ----
;
constructorBody
! : LCURLY! ^[SLIST,"{"]^ nls!
( (explicitConstructorInvocation) => // Java compatibility hack
explicitConstructorInvocation (sep! blockBody[sepToken])?
| blockBody[EOF]
***************
*** 1155,1164 ****
/** Catch obvious constructor calls, but not the expr.super(...) calls */
explicitConstructorInvocation
: (typeArguments)?
! ( "this"! lp1:LPAREN^ argList RPAREN!
! {#lp1.setType(CTOR_CALL);}
! | "super"! lp2:LPAREN^ argList RPAREN!
! {#lp2.setType(SUPER_CTOR_CALL);}
)
;
--- 1155,1162 ----
/** Catch obvious constructor calls, but not the expr.super(...) calls */
explicitConstructorInvocation
: (typeArguments)?
! ( "this"! LPAREN! ^[CTOR_CALL,"("]^ argList RPAREN!
! | "super"! LPAREN! ^[SUPER_CTOR_CALL,"("]^ argList RPAREN!
)
;
***************
*** 1182,1187 ****
--- 1180,1186 ----
( id:IDENT
| qid:STRING_LITERAL {#qid.setType(IDENT);} // use for operator defintions, etc.
+ //todo Add ^[IDENT,????] tree construction syntax
)
// parse the formal parameter declarations.
***************
*** 1267,1273 ****
(
// A following list constructor might conflict with index brackets; prefer the declarator.
options {greedy=true;} :
! lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!
)*
;
--- 1266,1272 ----
(
// A following list constructor might conflict with index brackets; prefer the declarator.
options {greedy=true;} :
! LBRACK! ^[ARRAY_DECLARATOR,"("]^ RBRACK!
)*
;
***************
*** 1280,1286 ****
/*OBS*
// This is an initializer used to set up an array.
arrayInitializer
! : lc:LCURLY^ {#lc.setType(ARRAY_INIT);}
( initializer
(
// CONFLICT: does a COMMA after an initializer start a new
--- 1279,1285 ----
/*OBS*
// This is an initializer used to set up an array.
arrayInitializer
! : LCURLY! ^[ARRAY_INIT,"{"]^
( initializer
(
// CONFLICT: does a COMMA after an initializer start a new
***************
*** 1494,1500 ****
/** An open block is not allowed to have closure arguments. */
openBlock
! : lc:LCURLY^ nls! {#lc.setType(SLIST);}
// AST type of SLIST means "never gonna be a closure"
blockBody[EOF]
RCURLY!
--- 1493,1499 ----
/** An open block is not allowed to have closure arguments. */
openBlock
! : LCURLY! ^[SLIST,"{"]^ nls!
// AST type of SLIST means "never gonna be a closure"
blockBody[EOF]
RCURLY!
***************
*** 1511,1517 ****
* Only labeled, unparameterized blocks which occur directly as substatements are kept open.
*/
closedBlock
! : lc:LCURLY^ nls! {#lc.setType(CLOSED_BLOCK);}
closureParametersOpt[true]
blockBody[EOF]
RCURLY!
--- 1510,1516 ----
* Only labeled, unparameterized blocks which occur directly as substatements are kept open.
*/
closedBlock
! : LCURLY! ^[CLOSED_BLOCK,"{"]^ nls!
closureParametersOpt[true]
blockBody[EOF]
RCURLY!
***************
*** 1533,1538 ****
--- 1532,1538 ----
openOrClosedBlock
: lc:LCURLY^ nls!
cp:closureParametersOpt[false]
+ // todo use ^[SLIST,???] or ^[CLOSED_BLOCK,???] tree construction syntax
{ if (#cp == null) #lc.setType(SLIST);
else #lc.setType(CLOSED_BLOCK);
}
***************
*** 1604,1610 ****
// Splice statement, meaningful only inside a "with" expression.
// PROPOSED, DECIDE. Prevents the namespace pollution of a "text" method or some such.
! | sp:STAR^ nls! {#sp.setType(SPREAD_ARG);}
expressionStatement[EOF]
// Example: with(htmlbuilder) { head{} body{ *"some text" } }
// Equivalent to: { htmlbuilder.head{} htmlbuilder.body{ (htmlbuilder as Collection).add("some text") } }
--- 1604,1610 ----
// Splice statement, meaningful only inside a "with" expression.
// PROPOSED, DECIDE. Prevents the namespace pollution of a "text" method or some such.
! | STAR! ^[SPREAD_ARG,"*"]^ nls!
expressionStatement[EOF]
// Example: with(htmlbuilder) { head{} body{ *"some text" } }
// Equivalent to: { htmlbuilder.head{} htmlbuilder.body{ (htmlbuilder as Collection).add("some text") } }
***************
*** 1626,1632 ****
/*OBS*
// empty statement
! | s:SEMI {#s.setType(EMPTY_STAT);}
*OBS*/
| branchStatement
--- 1626,1632 ----
/*OBS*
// empty statement
! | SEMI ^[EMPTY_STAT,";"]
*OBS*/
| branchStatement
***************
*** 1738,1744 ****
/** A labeled statement, consisting of a vanilla identifier followed by a colon. */
// Note: Always use this lookahead, to keep antlr from panicking: (IDENT COLON)=>
statementLabelPrefix
! : IDENT c:COLON^ {#c.setType(LABELED_STAT);}
;
/** An expression statement can be any general expression.
--- 1738,1744 ----
/** A labeled statement, consisting of a vanilla identifier followed by a colon. */
// Note: Always use this lookahead, to keep antlr from panicking: (IDENT COLON)=>
statementLabelPrefix
! : IDENT COLON! ^[LABELED_STAT,":"]^
;
/** An expression statement can be any general expression.
***************
*** 1910,1915 ****
--- 1910,1916 ----
{
AST elist = #(#[ELIST,"ELIST"], #commandArguments);
AST headid = getASTFactory().dup(#head);
+ //todo possibly use ^[METHOD_CALL,???] tree construction here
headid.setType(METHOD_CALL);
headid.setText("<command>");
#commandArguments = #(headid, head, elist);
***************
*** 2048,2057 ****
| DOT^ nls! "super"
( // (new Outer()).super() (create enclosing instance)
! lp3:LPAREN^ argList RPAREN!
! {#lp3.setType(SUPER_CTOR_CALL);}
| DOT^ IDENT
! ( lps:LPAREN^ {#lps.setType(METHOD_CALL);}
argList
RPAREN!
)?
--- 2049,2057 ----
| DOT^ nls! "super"
( // (new Outer()).super() (create enclosing instance)
! LPAREN! ^[SUPER_CTOR_CALL,"("]^ argList RPAREN!
| DOT^ IDENT
! ( LPAREN! ^[METHOD_CALL,"("]^
argList
RPAREN!
)?
***************
*** 2160,2166 ****
methodCallArgs[AST callee]
:
{#methodCallArgs = callee;}
! lp:LPAREN^ {#lp.setType(METHOD_CALL);}
argList
RPAREN!
;
--- 2160,2166 ----
methodCallArgs[AST callee]
:
{#methodCallArgs = callee;}
! LPAREN! ^[METHOD_CALL,"("]^
argList
RPAREN!
;
***************
*** 2197,2203 ****
indexPropertyArgs[AST indexee]
:
{#indexPropertyArgs = indexee;}
! lb:LBRACK^ {#lb.setType(INDEX_OP);}
argList
RBRACK!
;
--- 2197,2203 ----
indexPropertyArgs[AST indexee]
:
{#indexPropertyArgs = indexee;}
! LBRACK! ^[INDEX_OP,"("]^
argList
RBRACK!
;
***************
*** 2301,2307 ****
((SL^ | SR^ | BSR^)
| RANGE_INCLUSIVE^
| RANGE_EXCLUSIVE^
! | td:TRIPLE_DOT^ {#td.setType(RANGE_EXCLUSIVE);} /* backward compat: FIXME REMOVE */
)
nls!
additiveExpression[0]
--- 2301,2307 ----
((SL^ | SR^ | BSR^)
| RANGE_INCLUSIVE^
| RANGE_EXCLUSIVE^
! | TRIPLE_DOT! ^[RANGE_EXCLUSIVE,"..."]^ /* backward compat: FIXME REMOVE */
)
nls!
additiveExpression[0]
***************
*** 2325,2332 ****
multiplicativeExpression[int lc_stmt]
: ( INC^ nls! powerExpression[0] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
| ( DEC^ nls! powerExpression[0] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
! | ( MINUS^ {#MINUS.setType(UNARY_MINUS);} nls! powerExpression[0] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
! | ( PLUS^ {#PLUS.setType(UNARY_PLUS);} nls! powerExpression[0] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
| ( powerExpression[lc_stmt] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
;
--- 2325,2332 ----
multiplicativeExpression[int lc_stmt]
: ( INC^ nls! powerExpression[0] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
| ( DEC^ nls! powerExpression[0] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
! | ( MINUS! ^[UNARY_MINUS,"-"]^ nls! powerExpression[0] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
! | ( PLUS! ^[UNARY_PLUS,"+"]^ nls! powerExpression[0] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
| ( powerExpression[lc_stmt] ((STAR^ | DIV^ | MOD^ ) nls! powerExpression[0])* )
;
***************
*** 2339,2346 ****
unaryExpression[int lc_stmt]
: INC^ nls! unaryExpression[0]
| DEC^ nls! unaryExpression[0]
! | MINUS^ {#MINUS.setType(UNARY_MINUS);} nls! unaryExpression[0]
! | PLUS^ {#PLUS.setType(UNARY_PLUS);} nls! unaryExpression[0]
| unaryExpressionNotPlusMinus[lc_stmt]
;
--- 2339,2346 ----
unaryExpression[int lc_stmt]
: INC^ nls! unaryExpression[0]
| DEC^ nls! unaryExpression[0]
! | MINUS! ^[UNARY_MINUS,"-"]^ nls! unaryExpression[0]
! | PLUS! ^[UNARY_PLUS,"+"]^ nls! unaryExpression[0]
| unaryExpressionNotPlusMinus[lc_stmt]
;
***************
*** 2382,2389 ****
options {greedy=true;} :
// possibly add on a post-increment or post-decrement.
// allows INC/DEC on too much, but semantics can check
! in:INC^ {#in.setType(POST_INC);}
! | de:DEC^ {#de.setType(POST_DEC);}
)?
;
--- 2382,2389 ----
options {greedy=true;} :
// possibly add on a post-increment or post-decrement.
// allows INC/DEC on too much, but semantics can check
! INC! ^[POST_INC,"++"]^
! | DEC! ^[POST_DEC,"--"]^
)?
;
***************
*** 2421,2427 ****
;
scopeEscapeExpression
! : DOLLAR^ {#DOLLAR.setType(SCOPE_ESCAPE);} (IDENT | scopeEscapeExpression)
// PROPOSE: The SCOPE_ESCAPE operator pops its operand out of the scope of a "with" block.
// If not within a "with" block, it pops the operand out of the static global scope,
// into whatever dynamic (unchecked) global scope is available when the script is run,
--- 2421,2427 ----
;
scopeEscapeExpression
! : DOLLAR! ^[SCOPE_ESCAPE,"$"]^ (IDENT | scopeEscapeExpression)
// PROPOSE: The SCOPE_ESCAPE operator pops its operand out of the scope of a "with" block.
// If not within a "with" block, it pops the operand out of the static global scope,
// into whatever dynamic (unchecked) global scope is available when the script is run,
***************
*** 2471,2477 ****
:
(
// PROPOSE: allow spread markers on string constructor arguments
! sp:STAR^ {#sp.setType(SPREAD_ARG);}
)?
( identifier
| openOrClosedBlock
--- 2471,2477 ----
:
(
// PROPOSE: allow spread markers on string constructor arguments
! STAR! ^[SPREAD_ARG,"*"]^
)?
( identifier
| openOrClosedBlock
***************
*** 2546,2552 ****
// limitation of linear approximate lookahead.
greedy=true;
}
! : ( lp:LPAREN^ {#lp.setType(METHOD_CALL);}
// if the input is valid, only the last IDENT may
// have preceding typeArguments... rather hacky, this is...
{if (#ta2 != null) astFactory.addASTChild(currentAST, #ta2);}
--- 2546,2552 ----
// limitation of linear approximate lookahead.
greedy=true;
}
! : ( LPAREN! ^[METHOD_CALL,"("]^
// if the input is valid, only the last IDENT may
// have preceding typeArguments... rather hacky, this is...
{if (#ta2 != null) astFactory.addASTChild(currentAST, #ta2);}
***************
*** 2554,2560 ****
argList RPAREN!
)
| ( options {greedy=true;} :
! lbc:LBRACK^ {#lbc.setType(ARRAY_DECLARATOR);} RBRACK!
)+
)?
;
--- 2554,2560 ----
argList RPAREN!
)
| ( options {greedy=true;} :
! LBRACK! ^[ARRAY_DECLARATOR,"["]^ RBRACK!
)+
)?
;
***************
*** 2680,2691 ****
// Optional argument label.
// Usage: Specifies a map key, or a keyworded argument.
( (argumentLabelStart) =>
! argumentLabel c:COLON^ {#c.setType(LABELED_ARG);}
{ hasLabel = true; } // signal to caller the presence of a label
| // Spread operator: f(*[a,b,c]) === f(a,b,c); f(1,*null,2) === f(1,2).
! sp:STAR^ {#sp.setType(SPREAD_ARG);}
// spread maps are marked, as f(*:m) for f(a:x, b:y) if m==[a:x, b:y]
(
COLON! {#sp.setType(SPREAD_MAP_ARG);}
--- 2680,2691 ----
// Optional argument label.
// Usage: Specifies a map key, or a keyworded argument.
( (argumentLabelStart) =>
! argumentLabel COLON! ^[LABELED_ARG,":"]^
{ hasLabel = true; } // signal to caller the presence of a label
| // Spread operator: f(*[a,b,c]) === f(a,b,c); f(1,*null,2) === f(1,2).
! STAR! ^[SPREAD_ARG,"*"]^
// spread maps are marked, as f(*:m) for f(a:x, b:y) if m==[a:x, b:y]
(
COLON! {#sp.setType(SPREAD_MAP_ARG);}
***************
*** 2733,2739 ****
warnWhenFollowAmbig = false;
}
:
! lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);}
(expression[0])?
RBRACK!
)+
--- 2733,2739 ----
warnWhenFollowAmbig = false;
}
:
! LBRACK! ^[ARRAY_DECLARATOR,"("]^
(expression[0])?
RBRACK!
)+