******************************************************************************* | |
* Copyright (c) 2005 BEA Systems and others. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* BEA Systems - initial implementation | |
* | |
*******************************************************************************/ | |
/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. JSPEL.jj */ | |
/*@egen*//* I know that haing some of these options on one line is rude but | |
* if we don't do that the line number reported from javacc are off | |
* which, trust me, is far more annoying. --tcarroll@bea.com | |
*/ | |
options { | |
JAVA_UNICODE_ESCAPE = false; | |
UNICODE_INPUT = true; | |
STATIC = false; | |
OPTIMIZE_TOKEN_MANAGER = true; | |
} | |
PARSER_BEGIN(JSPELParser) | |
package org.eclipse.jst.jsp.core.internal.java.jspel; | |
public class JSPELParser/*@bgen(jjtree)*/implements JSPELParserTreeConstants/*@egen*/ {/*@bgen(jjtree)*/ | |
protected JJTJSPELParserState jjtree = new JJTJSPELParserState(); | |
/*@egen*/ | |
void jjtreeOpenNodeScope(Node n) | |
{ | |
((SimpleNode)n).setFirstToken(getToken(1)); | |
} | |
void jjtreeCloseNodeScope(Node n) | |
{ | |
((SimpleNode)n).setLastToken(getToken(0)); | |
} | |
public static JSPELParser createParser(java.lang.String input) { | |
java.io.StringReader reader = new java.io.StringReader(input); | |
return new JSPELParser(reader); | |
} | |
public void ReInit(java.lang.String input) { | |
java.io.StringReader reader = new java.io.StringReader(input); | |
ReInit(reader); | |
} | |
} | |
PARSER_END(JSPELParser) | |
SKIP : | |
{ | |
" " | |
| "\t" | |
| "\n" | |
| "\r" | |
} | |
TOKEN : | |
{ | |
/* Literals */ | |
< INTEGER_LITERAL: ["0"-"9"] (["0"-"9"])* > | |
| | |
< FLOATING_POINT_LITERAL: | |
(["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? | |
| "." (["0"-"9"])+ (<EXPONENT>)? | |
| (["0"-"9"])+ <EXPONENT> | |
> | |
| | |
< #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ > | |
| | |
< STRING_LITERAL: | |
("\"" ((~["\"","\\"]) | ("\\" ( ["\\","\""] )))* "\"") | | |
("\'" ((~["\'","\\"]) | ("\\" ( ["\\","\'"] )))* "\'") | |
> | |
| | |
< BADLY_ESCAPED_STRING_LITERAL: | |
("\"" (~["\"","\\"])* ("\\" ( ~["\\","\""] ))) | | |
("\'" (~["\'","\\"])* ("\\" ( ~["\\","\'"] ))) | |
> | |
/* Reserved Words and Symbols */ | |
| < TRUE: "true" > | |
| < FALSE: "false" > | |
| < NULL: "null" > | |
| < DOT: "." > | |
| < GT1: ">" > | |
| < GT2: "gt" > | |
| < LT1: "<" > | |
| < LT2: "lt" > | |
| < EQ1: "==" > | |
| < EQ2: "eq" > | |
| < LE1: "<=" > | |
| < LE2: "le" > | |
| < GE1: ">=" > | |
| < GE2: "ge" > | |
| < NEQ1: "!=" > | |
| < NEQ2: "ne" > | |
| < LPAREN: "(" > | |
| < RPAREN: ")" > | |
| < COMMA: "," > | |
| < COLON: ":" > | |
| < LBRACKET: "[" > | |
| < RBRACKET: "]" > | |
| < PLUS: "+" > | |
| < MINUS: "-" > | |
| < MULTIPLY: "*" > | |
| < DIVIDE1: "/" > | |
| < DIVIDE2: "div" > | |
| < MODULUS1: "%" > | |
| < MODULUS2: "mod" > | |
| < NOT1: "not" > | |
| < NOT2: "!" > | |
| < AND1: "and" > | |
| < AND2: "&&" > | |
| < OR1: "or" > | |
| < OR2: "||" > | |
| < EMPTY: "empty" > | |
| < COND: "?" > | |
/* Identifiers */ | |
| < IDENTIFIER: (<LETTER>|<IMPL_OBJ_START>) (<LETTER>|<DIGIT>)* > | |
| < #IMPL_OBJ_START: "#" > | |
| | |
< #LETTER: | |
[ | |
"$", | |
"A"-"Z", | |
"_", | |
"a"-"z", | |
"\u00c0"-"\u00d6", | |
"\u00d8"-"\u00f6", | |
"\u00f8"-"\u00ff", | |
"\u0100"-"\u1fff", | |
"\u3040"-"\u318f", | |
"\u3300"-"\u337f", | |
"\u3400"-"\u3d2d", | |
"\u4e00"-"\u9fff", | |
"\uf900"-"\ufaff" | |
] | |
> | |
| | |
< #DIGIT: | |
[ | |
"0"-"9", | |
"\u0660"-"\u0669", | |
"\u06f0"-"\u06f9", | |
"\u0966"-"\u096f", | |
"\u09e6"-"\u09ef", | |
"\u0a66"-"\u0a6f", | |
"\u0ae6"-"\u0aef", | |
"\u0b66"-"\u0b6f", | |
"\u0be7"-"\u0bef", | |
"\u0c66"-"\u0c6f", | |
"\u0ce6"-"\u0cef", | |
"\u0d66"-"\u0d6f", | |
"\u0e50"-"\u0e59", | |
"\u0ed0"-"\u0ed9", | |
"\u1040"-"\u1049" | |
] | |
> | |
} | |
ASTExpression Expression() : {/*@bgen(jjtree) Expression */ | |
ASTExpression jjtn000 = new ASTExpression(JJTEXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/} | |
{/*@bgen(jjtree) Expression */ | |
try { | |
/*@egen*/ | |
(LOOKAHEAD("?") ChoiceExpression() | OrExpression())/*@bgen(jjtree)*/ | |
{ | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtc000 = false; | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
/*@egen*/ { return jjtn000; }/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void OrExpression() : | |
{/*@bgen(jjtree) #OrExpression(> 1) */ | |
ASTOrExpression jjtn000 = new ASTOrExpression(JJTOREXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/ | |
Token t; | |
} | |
{/*@bgen(jjtree) #OrExpression(> 1) */ | |
try { | |
/*@egen*/ | |
AndExpression() ((t = <OR1> | t = <OR2>) { jjtn000.addOperatorToken(t); } | |
AndExpression())*/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void AndExpression() : | |
{/*@bgen(jjtree) #AndExpression(> 1) */ | |
ASTAndExpression jjtn000 = new ASTAndExpression(JJTANDEXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/ | |
Token t; | |
} | |
{/*@bgen(jjtree) #AndExpression(> 1) */ | |
try { | |
/*@egen*/ | |
EqualityExpression() ((t = <AND1> | t = <AND2>) { jjtn000.addOperatorToken(t); } | |
EqualityExpression())*/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void EqualityExpression() : | |
{/*@bgen(jjtree) #EqualityExpression(> 1) */ | |
ASTEqualityExpression jjtn000 = new ASTEqualityExpression(JJTEQUALITYEXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/ | |
Token t; | |
} | |
{/*@bgen(jjtree) #EqualityExpression(> 1) */ | |
try { | |
/*@egen*/ | |
RelationalExpression() | |
((t = <EQ1> | t = <EQ2> | t = <NEQ1> | t = <NEQ2>) { jjtn000.addOperatorToken(t); } | |
RelationalExpression())*/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void RelationalExpression() : | |
{/*@bgen(jjtree) #RelationalExpression(> 1) */ | |
ASTRelationalExpression jjtn000 = new ASTRelationalExpression(JJTRELATIONALEXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/ | |
Token t; | |
} | |
{/*@bgen(jjtree) #RelationalExpression(> 1) */ | |
try { | |
/*@egen*/ | |
AddExpression() | |
( | |
(t = <LT1> | t = <LT2> | t = <GT1> | t = <GT2> | t = <GE1> | t = <GE2> | t = <LE1> | t = <LE2>) { jjtn000.addOperatorToken(t); } | |
AddExpression() | |
)*/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void AddExpression() : | |
{/*@bgen(jjtree) #AddExpression(> 1) */ | |
ASTAddExpression jjtn000 = new ASTAddExpression(JJTADDEXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/ | |
Token t; | |
} | |
{/*@bgen(jjtree) #AddExpression(> 1) */ | |
try { | |
/*@egen*/ | |
MultiplyExpression() ((t = <PLUS> | t = <MINUS>) { jjtn000.addOperatorToken(t); } | |
MultiplyExpression())*/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void MultiplyExpression() : | |
{/*@bgen(jjtree) #MultiplyExpression(> 1) */ | |
ASTMultiplyExpression jjtn000 = new ASTMultiplyExpression(JJTMULTIPLYEXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/ | |
Token t; | |
} | |
{/*@bgen(jjtree) #MultiplyExpression(> 1) */ | |
try { | |
/*@egen*/ | |
UnaryExpression() ( | |
( t = <MULTIPLY> | t = <DIVIDE1> | t = <DIVIDE2> | t = <MODULUS1> | t = <MODULUS2>) { jjtn000.addOperatorToken(t); } | |
UnaryExpression() | |
)*/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, jjtree.nodeArity() > 1); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void ChoiceExpression() : {/*@bgen(jjtree) ChoiceExpression */ | |
ASTChoiceExpression jjtn000 = new ASTChoiceExpression(JJTCHOICEEXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/} | |
{/*@bgen(jjtree) ChoiceExpression */ | |
try { | |
/*@egen*/ | |
OrExpression() <COND> OrExpression() <COLON> OrExpression()/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void UnaryExpression() : {/*@bgen(jjtree) UnaryExpression */ | |
ASTUnaryExpression jjtn000 = new ASTUnaryExpression(JJTUNARYEXPRESSION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/} | |
{/*@bgen(jjtree) UnaryExpression */ | |
try { | |
/*@egen*/ | |
((<NOT1> | <NOT2> | <MINUS> | <EMPTY>) UnaryExpression()) | |
| Value()/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void Value() : {/*@bgen(jjtree) Value */ | |
ASTValue jjtn000 = new ASTValue(JJTVALUE); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/} | |
{/*@bgen(jjtree) Value */ | |
try { | |
/*@egen*/ | |
ValuePrefix() (ValueSuffix())*/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void ValuePrefix() : {/*@bgen(jjtree) ValuePrefix */ | |
ASTValuePrefix jjtn000 = new ASTValuePrefix(JJTVALUEPREFIX); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/} | |
{/*@bgen(jjtree) ValuePrefix */ | |
try { | |
/*@egen*/ | |
Literal() | (<LPAREN> Expression() <RPAREN>) | LOOKAHEAD(3) FunctionInvocation() | <IDENTIFIER>/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void ValueSuffix() : | |
{/*@bgen(jjtree) ValueSuffix */ | |
ASTValueSuffix jjtn000 = new ASTValueSuffix(JJTVALUESUFFIX); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/ | |
Token t = null; | |
} | |
{/*@bgen(jjtree) ValueSuffix */ | |
try { | |
/*@egen*/ | |
(<DOT> (t = <IDENTIFIER>)?)/*@bgen(jjtree)*/ | |
{ | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtc000 = false; | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
/*@egen*/ { jjtn000.setPropertyNameToken(t); } | |
| (<LBRACKET> Expression() <RBRACKET>)/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void FunctionInvocation() : | |
{/*@bgen(jjtree) FunctionInvocation */ | |
ASTFunctionInvocation jjtn000 = new ASTFunctionInvocation(JJTFUNCTIONINVOCATION); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/ | |
Token prefix = null, name = null; | |
} | |
{/*@bgen(jjtree) FunctionInvocation */ | |
try { | |
/*@egen*/ | |
(prefix = <IDENTIFIER> <COLON>) { jjtn000.setFullFunctionName(prefix.image + ":"); } | |
(name = <IDENTIFIER>)? { | |
if(null != prefix && null != name) | |
jjtn000.setFullFunctionName(prefix.image + ":" + (null == name ? "" : name.image)); | |
else if(null != name) | |
jjtn000.setFullFunctionName(name.image); | |
} | |
(<LPAREN> Expression() (<COMMA> Expression())* try { (<RPAREN>) } catch (Exception e) {} )?/*@bgen(jjtree)*/ | |
} catch (Throwable jjte000) { | |
if (jjtc000) { | |
jjtree.clearNodeScope(jjtn000); | |
jjtc000 = false; | |
} else { | |
jjtree.popNode(); | |
} | |
if (jjte000 instanceof RuntimeException) { | |
throw (RuntimeException)jjte000; | |
} | |
if (jjte000 instanceof ParseException) { | |
throw (ParseException)jjte000; | |
} | |
throw (Error)jjte000; | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} | |
void Literal() : {/*@bgen(jjtree) Literal */ | |
ASTLiteral jjtn000 = new ASTLiteral(JJTLITERAL); | |
boolean jjtc000 = true; | |
jjtree.openNodeScope(jjtn000); | |
jjtreeOpenNodeScope(jjtn000); | |
/*@egen*/} | |
{/*@bgen(jjtree) Literal */ | |
try { | |
/*@egen*/ | |
<TRUE> | <FALSE> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <STRING_LITERAL> | <NULL>/*@bgen(jjtree)*/ | |
} finally { | |
if (jjtc000) { | |
jjtree.closeNodeScope(jjtn000, true); | |
jjtreeCloseNodeScope(jjtn000); | |
} | |
} | |
/*@egen*/ | |
} |