X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/test/PHPParser.jj b/net.sourceforge.phpeclipse/src/test/PHPParser.jj index 1e7e5a2..2c1b336 100644 --- a/net.sourceforge.phpeclipse/src/test/PHPParser.jj +++ b/net.sourceforge.phpeclipse/src/test/PHPParser.jj @@ -3,7 +3,7 @@ options { CHOICE_AMBIGUITY_CHECK = 2; OTHER_AMBIGUITY_CHECK = 1; STATIC = true; - DEBUG_PARSER = false; + DEBUG_PARSER = true; DEBUG_LOOKAHEAD = false; DEBUG_TOKEN_MANAGER = false; OPTIMIZE_TOKEN_MANAGER = false; @@ -40,6 +40,7 @@ import net.sourceforge.phpdt.internal.compiler.ast.*; import net.sourceforge.phpdt.internal.compiler.parser.OutlineableWithChildren; import net.sourceforge.phpdt.internal.compiler.parser.Outlineable; import net.sourceforge.phpdt.internal.compiler.parser.PHPOutlineInfo; +import net.sourceforge.phpdt.internal.corext.Assert; /** * A new php parser. @@ -80,7 +81,7 @@ public final class PHPParser extends PHPParserSuperclass { /** The cursor in expression stack. */ private static int nodePtr; - private static final boolean PARSER_DEBUG = false; + private static final boolean PARSER_DEBUG = true; public final void setFileToParse(final IFile fileToParse) { PHPParser.fileToParse = fileToParse; @@ -94,6 +95,46 @@ public final class PHPParser extends PHPParserSuperclass { PHPParser.fileToParse = fileToParse; } + public static final void phpParserTester(final String strEval) throws ParseException { + final StringReader stream = new StringReader(strEval); + if (jj_input_stream == null) { + jj_input_stream = new SimpleCharStream(stream, 1, 1); + } + ReInit(new StringReader(strEval)); + init(); + phpDocument = new PHPDocument(null,"_root".toCharArray()); + currentSegment = phpDocument; + outlineInfo = new PHPOutlineInfo(null, currentSegment); + PHPParserTokenManager.SwitchTo(PHPParserTokenManager.PHPPARSING); + phpTest(); + } + + public static final void htmlParserTester(final File fileName) throws FileNotFoundException, ParseException { + final Reader stream = new FileReader(fileName); + if (jj_input_stream == null) { + jj_input_stream = new SimpleCharStream(stream, 1, 1); + } + ReInit(stream); + init(); + phpDocument = new PHPDocument(null,"_root".toCharArray()); + currentSegment = phpDocument; + outlineInfo = new PHPOutlineInfo(null, currentSegment); + phpFile(); + } + + public static final void htmlParserTester(final String strEval) throws ParseException { + final StringReader stream = new StringReader(strEval); + if (jj_input_stream == null) { + jj_input_stream = new SimpleCharStream(stream, 1, 1); + } + ReInit(stream); + init(); + phpDocument = new PHPDocument(null,"_root".toCharArray()); + currentSegment = phpDocument; + outlineInfo = new PHPOutlineInfo(null, currentSegment); + phpFile(); + } + /** * Reinitialize the parser. */ @@ -143,16 +184,18 @@ public final class PHPParser extends PHPParserSuperclass { return outlineInfo; } + private static void processParseExceptionDebug(final ParseException e) throws ParseException { + if (PARSER_DEBUG) { + throw e; + } + processParseException(e); + } /** * This method will process the parse exception. * If the error message is null, the parse exception wasn't catched and a trace is written in the log * @param e the ParseException */ private static void processParseException(final ParseException e) { - if (PARSER_DEBUG) { - e.printStackTrace(); - return; - } if (errorMessage == null) { PHPeclipsePlugin.log(e); errorMessage = "this exception wasn't handled by the parser please tell us how to reproduce it"; @@ -233,7 +276,7 @@ public final class PHPParser extends PHPParserSuperclass { } } - public final void parse(final String s) throws CoreException { + public final void parse(final String s) { final StringReader stream = new StringReader(s); if (jj_input_stream == null) { jj_input_stream = new SimpleCharStream(stream, 1, 1); @@ -580,6 +623,13 @@ MORE : > } +void phpTest() : +{} +{ + Php() + +} + void phpFile() : {} { @@ -631,7 +681,7 @@ void PhpBlock() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } } @@ -674,7 +724,7 @@ ClassDeclaration ClassDeclaration() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } [ @@ -686,7 +736,7 @@ ClassDeclaration ClassDeclaration() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); superclassNameImage = SYNTAX_ERROR_CHAR; } ] @@ -708,7 +758,7 @@ ClassDeclaration ClassDeclaration() : } ClassBody(classDeclaration) {currentSegment = (OutlineableWithChildren) currentSegment.getParent(); - classDeclaration.sourceEnd = SimpleCharStream.getPosition(); + classDeclaration.setSourceEnd(SimpleCharStream.getPosition()); pushOnAstNodes(classDeclaration); return classDeclaration;} } @@ -723,7 +773,7 @@ void ClassBody(final ClassDeclaration classDeclaration) : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } ( ClassBodyDeclaration(classDeclaration) )* try { @@ -733,7 +783,7 @@ void ClassBody(final ClassDeclaration classDeclaration) : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } } @@ -778,7 +828,7 @@ FieldDeclaration FieldDeclaration() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } {list = new VariableDeclaration[arrayList.size()]; @@ -791,15 +841,16 @@ FieldDeclaration FieldDeclaration() : /** * a strict variable declarator : there cannot be a suffix here. + * It will be used by fields and formal parameters */ VariableDeclaration VariableDeclaratorNoSuffix() : { final Token varName; Expression initializer = null; - final int pos = SimpleCharStream.getPosition(); } { varName = + {final int pos = SimpleCharStream.getPosition()-varName.image.length();} [ try { @@ -809,32 +860,35 @@ VariableDeclaration VariableDeclaratorNoSuffix() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } ] { if (initializer == null) { return new VariableDeclaration(currentSegment, - new Variable(varName.image.substring(1).toCharArray(),SimpleCharStream.getPosition()-varName.image.length()-1,SimpleCharStream.getPosition()), + new Variable(varName.image.substring(1),SimpleCharStream.getPosition()-varName.image.length()-1,SimpleCharStream.getPosition()), pos, SimpleCharStream.getPosition()); } return new VariableDeclaration(currentSegment, - new Variable(varName.image.substring(1).toCharArray(),SimpleCharStream.getPosition()-varName.image.length()-1,SimpleCharStream.getPosition()), + new Variable(varName.image.substring(1),SimpleCharStream.getPosition()-varName.image.length()-1,SimpleCharStream.getPosition()), initializer, VariableDeclaration.EQUAL, pos); } } +/** + * this will be used by static statement + */ VariableDeclaration VariableDeclarator() : { - final String varName; + final AbstractVariable variable; Expression initializer = null; final int pos = SimpleCharStream.getPosition(); } { - varName = VariableDeclaratorId() + variable = VariableDeclaratorId() [ try { @@ -844,18 +898,18 @@ VariableDeclaration VariableDeclarator() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } ] { if (initializer == null) { return new VariableDeclaration(currentSegment, - new Variable(varName.substring(1).toCharArray(),SimpleCharStream.getPosition()-varName.length()-1,SimpleCharStream.getPosition()), - pos, - SimpleCharStream.getPosition()); + variable, + pos, + SimpleCharStream.getPosition()); } return new VariableDeclaration(currentSegment, - new Variable(varName.substring(1).toCharArray(),SimpleCharStream.getPosition()-varName.length()-1,SimpleCharStream.getPosition()), + variable, initializer, VariableDeclaration.EQUAL, pos); @@ -866,28 +920,24 @@ VariableDeclaration VariableDeclarator() : * A Variable name. * @return the variable name (with suffix) */ -String VariableDeclaratorId() : +AbstractVariable VariableDeclaratorId() : { - final String var; - Expression expression = null; + final Variable var; + AbstractVariable expression = null; final int pos = SimpleCharStream.getPosition(); - ConstantIdentifier ex; } { try { var = Variable() ( LOOKAHEAD(2) - {ex = new ConstantIdentifier(var.toCharArray(), - pos, - SimpleCharStream.getPosition());} - expression = VariableSuffix(ex) + expression = VariableSuffix(var) )* { if (expression == null) { return var; } - return expression.toStringExpression(); + return expression; } } catch (ParseException e) { errorMessage = "'$' expected for variable identifier"; @@ -902,68 +952,102 @@ String VariableDeclaratorId() : * Return a variablename without the $. * @return a variable name */ -String Variable(): +Variable Variable(): { final StringBuffer buff; Expression expression = null; final Token token; - final String expr; + Variable expr; + final int pos; } { - token = [ expression = Expression() ] + token = {pos = SimpleCharStream.getPosition()-token.image.length();} + [ expression = Expression() ] { if (expression == null) { - return token.image.substring(1); + return new Variable(token.image.substring(1),pos,SimpleCharStream.getPosition()); } - buff = new StringBuffer(token.image); + String s = expression.toStringExpression(); + buff = new StringBuffer(token.image.length()+s.length()+2); + buff.append(token.image); buff.append("{"); - buff.append(expression.toStringExpression()); + buff.append(s); buff.append("}"); - return buff.toString(); + s = buff.toString(); + return new Variable(s,pos,SimpleCharStream.getPosition()); } | - expr = VariableName() - {return expr;} + {pos = SimpleCharStream.getPosition()-1;} + expr = VariableName() + {return new Variable(expr,pos,SimpleCharStream.getPosition());} } /** * A Variable name (without the $) * @return a variable name String */ -String VariableName(): +Variable VariableName(): { final StringBuffer buff; - final String expr; + String expr; + final Variable var; Expression expression = null; final Token token; + int pos; } { - expression = Expression() - {buff = new StringBuffer("{"); - buff.append(expression.toStringExpression()); + + {pos = SimpleCharStream.getPosition()-1;} + expression = Expression() + {expr = expression.toStringExpression(); + buff = new StringBuffer(expr.length()+2); + buff.append("{"); + buff.append(expr); buff.append("}"); - return buff.toString();} + pos = SimpleCharStream.getPosition(); + expr = buff.toString(); + return new Variable(expr, + pos, + SimpleCharStream.getPosition()); + + } | - token = [ expression = Expression() ] + token = + {pos = SimpleCharStream.getPosition() - token.image.length();} + [ expression = Expression() ] { if (expression == null) { - return token.image; + return new Variable(token.image, + pos, + SimpleCharStream.getPosition()); } - buff = new StringBuffer(token.image); + expr = expression.toStringExpression(); + buff = new StringBuffer(token.image.length()+expr.length()+2); + buff.append(token.image); buff.append("{"); - buff.append(expression.toStringExpression()); + buff.append(expr); buff.append("}"); - return buff.toString(); + expr = buff.toString(); + return new Variable(expr, + pos, + SimpleCharStream.getPosition()); } | - expr = VariableName() + {pos = SimpleCharStream.getPosition() - 1;} + var = VariableName() { - buff = new StringBuffer("$"); - buff.append(expr); - return buff.toString(); + return new Variable(var, + pos, + SimpleCharStream.getPosition()); } | - token = {return token.image;} + token = + { + pos = SimpleCharStream.getPosition(); + return new Variable(token.image, + pos-token.image.length(), + pos); + } } Expression VariableInitializer() : @@ -1087,7 +1171,7 @@ MethodDeclaration MethodDeclarator() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } formalParameters = FormalParameters() {MethodDeclaration method = new MethodDeclaration(currentSegment, @@ -1116,7 +1200,7 @@ Hashtable FormalParameters() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } [ var = FormalParameter() @@ -1133,7 +1217,7 @@ Hashtable FormalParameters() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } {return parameters;} } @@ -1192,7 +1276,7 @@ Expression Expression() : [ assignOperator = AssignmentOperator() try { - initializer = ConditionalExpression() + initializer = Expression() } catch (ParseException e) { if (errorMessage != null) { throw e; @@ -1204,21 +1288,21 @@ Expression Expression() : } ] { - char[] varName = expr.toStringExpression().substring(1).toCharArray(); - if (assignOperator == -1) { + if (assignOperator != -1) {// todo : change this, very very bad :( + if (expr instanceof AbstractVariable) { + return new VariableDeclaration(currentSegment, + (AbstractVariable) expr, + pos, + SimpleCharStream.getPosition()); + } + String varName = expr.toStringExpression().substring(1); return new VariableDeclaration(currentSegment, - new Variable(varName,SimpleCharStream.getPosition()-varName.length-1,SimpleCharStream.getPosition()), + new Variable(varName,SimpleCharStream.getPosition()-varName.length()-1,SimpleCharStream.getPosition()), pos, SimpleCharStream.getPosition()); - return expr; } - return new VariableDeclaration(currentSegment, - new Variable(varName,SimpleCharStream.getPosition()-varName.length-1,SimpleCharStream.getPosition()), - initializer, - assignOperator, - pos); - } - {return expr;} + return expr; + } | expr = ExpressionWBang() {return expr;} } @@ -1234,14 +1318,12 @@ Expression ExpressionWBang() : Expression ExpressionNoBang() : { - Expression expr = null; - int assignOperator = -1; - String var; - final int pos = SimpleCharStream.getPosition(); + Expression expr; } { + expr = ListExpression() {return expr;} +| expr = PrintExpression() {return expr;} -| expr = ListExpression() {return expr;} } /** @@ -1445,9 +1527,10 @@ Expression AdditiveExpression() : { expr = MultiplicativeExpression() ( - LOOKAHEAD(1) - ( {operator = OperatorIds.PLUS;} - | {operator = OperatorIds.MINUS;} ) + LOOKAHEAD(1) + ( {operator = OperatorIds.PLUS;} + | {operator = OperatorIds.MINUS;} + ) expr2 = MultiplicativeExpression() {expr = new BinaryExpression(expr,expr2,operator);} )* @@ -1489,22 +1572,30 @@ Expression UnaryExpression() : final int pos = SimpleCharStream.getPosition(); } { - expr = UnaryExpressionNoPrefix() + /* expr = UnaryExpressionNoPrefix() //why did I had that ? {return new PrefixedUnaryExpression(expr,OperatorIds.AND,pos);} -| - expr = AtUnaryExpression() {return expr;} +| */ + expr = AtNotUnaryExpression() {return expr;} } -Expression AtUnaryExpression() : +/** + * An expression prefixed (or not) by one or more @ and !. + * @return the expression + */ +Expression AtNotUnaryExpression() : { final Expression expr; final int pos = SimpleCharStream.getPosition(); } { - expr = AtUnaryExpression() + expr = AtNotUnaryExpression() {return new PrefixedUnaryExpression(expr,OperatorIds.AT,pos);} | + + expr = AtNotUnaryExpression() + {return new PrefixedUnaryExpression(expr,OperatorIds.NOT,pos);} +| expr = UnaryExpressionNoPrefix() {return expr;} } @@ -1513,17 +1604,12 @@ Expression AtUnaryExpression() : Expression UnaryExpressionNoPrefix() : { final Expression expr; - final int operator; final int pos = SimpleCharStream.getPosition(); } { - ( - {operator = OperatorIds.PLUS;} - | - {operator = OperatorIds.MINUS;} - ) - expr = UnaryExpression() - {return new PrefixedUnaryExpression(expr,operator,pos);} + expr = AtNotUnaryExpression() {return new PrefixedUnaryExpression(expr,OperatorIds.PLUS,pos);} +| + expr = AtNotUnaryExpression() {return new PrefixedUnaryExpression(expr,OperatorIds.MINUS,pos);} | expr = PreIncDecExpression() {return expr;} @@ -1612,22 +1698,40 @@ Expression PostfixExpression() : Expression PrimaryExpression() : { - Expression expr; + Expression expr = null; + Expression expr2; int assignOperator = -1; final Token identifier; final String var; - final int pos = SimpleCharStream.getPosition(); + final int pos; } { - expr = PrimaryPrefix() - (expr = PrimarySuffix(expr))* + token = + { + pos = SimpleCharStream.getPosition(); + expr = new ConstantIdentifier(token.image.toCharArray(), + pos-token.image.length(), + pos); + } + ( + expr2 = ClassIdentifier() + {expr = new ClassAccess(expr, + expr2, + ClassAccess.STATIC);} + )* [ expr = Arguments(expr) ] {return expr;} | - expr = ClassIdentifier() + expr = VariableDeclaratorId() + [ expr = Arguments(expr) ] + {return expr;} +| + + {pos = SimpleCharStream.getPosition();} + expr = ClassIdentifier() {expr = new PrefixedUnaryExpression(expr, OperatorIds.NEW, - pos); + pos-3); } [ expr = Arguments(expr) ] {return expr;} @@ -1636,37 +1740,6 @@ Expression PrimaryExpression() : {return expr;} } -Expression PrimaryPrefix() : -{ - final Expression expr; - final Token token; - final String var; - final int pos = SimpleCharStream.getPosition(); -} -{ - token = {return new ConstantIdentifier(token.image.toCharArray(), - pos, - SimpleCharStream.getPosition());} -| - var = VariableDeclaratorId() {return new Variable(var.toCharArray(), - pos, - SimpleCharStream.getPosition());} -} - -AbstractSuffixExpression PrimarySuffix(final Expression prefix) : -{ - final AbstractSuffixExpression suffix; - final Expression expr; -} -{ - suffix = VariableSuffix(prefix) {return suffix;} -| expr = ClassIdentifier() - {suffix = new ClassAccess(prefix, - expr, - ClassAccess.STATIC); - return suffix;} -} - /** * An array declarator. * array(vars) @@ -1703,26 +1776,28 @@ PrefixedUnaryExpression classInstantiation() : pos);} } -ConstantIdentifier ClassIdentifier(): +Expression ClassIdentifier(): { - final String expr; + final Expression expr; final Token token; - final int pos = SimpleCharStream.getPosition(); final ConstantIdentifier type; } { - token = {return new ConstantIdentifier(token.image.toCharArray(), - pos, - SimpleCharStream.getPosition());} -| type = Type() {return type;} -| expr = VariableDeclaratorId() {return new ConstantIdentifier(expr.toCharArray(), - pos, - SimpleCharStream.getPosition());} + token = + {final int pos = SimpleCharStream.getPosition(); + return new ConstantIdentifier(token.image.toCharArray(), + pos-token.image.length(), + pos);} +| expr = Type() {return expr;} +| expr = VariableDeclaratorId() {return expr;} } -AbstractSuffixExpression VariableSuffix(final Expression prefix) : +/** + * Used by Variabledeclaratorid and primarysuffix + */ +AbstractVariable VariableSuffix(final AbstractVariable prefix) : { - String expr = null; + Variable expr = null; final int pos = SimpleCharStream.getPosition(); Expression expression = null; } @@ -1738,7 +1813,7 @@ AbstractSuffixExpression VariableSuffix(final Expression prefix) : throw e; } {return new ClassAccess(prefix, - new ConstantIdentifier(expr.toCharArray(),pos,SimpleCharStream.getPosition()), + expr, ClassAccess.NORMAL);} | [ expression = Expression() | expression = Type() ] //Not good @@ -1897,7 +1972,7 @@ Define defineStatement() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } try { defineName = Expression() @@ -1915,7 +1990,7 @@ Define defineStatement() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } try { defineValue = Expression() @@ -1933,7 +2008,7 @@ Define defineStatement() : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } {return new Define(currentSegment, defineName, @@ -2038,7 +2113,7 @@ PrintExpression PrintExpression() : ListExpression ListExpression() : { - String expr = null; + Expression expr = null; final Expression expression; final ArrayList list = new ArrayList(); final int pos = SimpleCharStream.getPosition(); @@ -2082,17 +2157,17 @@ ListExpression ListExpression() : } [ expression = Expression() { - final String[] strings = new String[list.size()]; - list.toArray(strings); - return new ListExpression(strings, + final Variable[] vars = new Variable[list.size()]; + list.toArray(vars); + return new ListExpression(vars, expression, pos, SimpleCharStream.getPosition());} ] { - final String[] strings = new String[list.size()]; - list.toArray(strings); - return new ListExpression(strings,pos,SimpleCharStream.getPosition());} + final Variable[] vars = new Variable[list.size()]; + list.toArray(vars); + return new ListExpression(vars,pos,SimpleCharStream.getPosition());} } /** @@ -2131,25 +2206,25 @@ EchoStatement EchoStatement() : GlobalStatement GlobalStatement() : { final int pos = SimpleCharStream.getPosition(); - String expr; + Variable expr; final ArrayList vars = new ArrayList(); final GlobalStatement global; } { - expr = VariableDeclaratorId() + expr = Variable() {vars.add(expr);} ( - expr = VariableDeclaratorId() + expr = Variable() {vars.add(expr);} )* try { { - final String[] strings = new String[vars.size()]; - vars.toArray(strings); + final Variable[] variables = new Variable[vars.size()]; + vars.toArray(variables); global = new GlobalStatement(currentSegment, - strings, + variables, pos, SimpleCharStream.getPosition()); currentSegment.add(global); @@ -2170,16 +2245,18 @@ StaticStatement StaticStatement() : VariableDeclaration expr; } { - expr = VariableDeclarator() {vars.add(new String(expr.name()));} - ( expr = VariableDeclarator() {vars.add(new String(expr.name()));})* + expr = VariableDeclarator() {vars.add(expr);} + ( + expr = VariableDeclarator() {vars.add(expr);} + )* try { { - final String[] strings = new String[vars.size()]; - vars.toArray(strings); - return new StaticStatement(strings, - pos, - SimpleCharStream.getPosition());} + final VariableDeclaration[] variables = new VariableDeclaration[vars.size()]; + vars.toArray(variables); + return new StaticStatement(variables, + pos, + SimpleCharStream.getPosition());} } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. a ';' was expected"; errorLevel = ERROR; @@ -2269,6 +2346,9 @@ Statement BlockStatementNoBreak() : return statement;} } +/** + * used only by ForInit() + */ VariableDeclaration[] LocalVariableDeclaration() : { final ArrayList list = new ArrayList(); @@ -2284,26 +2364,29 @@ VariableDeclaration[] LocalVariableDeclaration() : return vars;} } +/** + * used only by LocalVariableDeclaration(). + */ VariableDeclaration LocalVariableDeclarator() : { - final String varName; + final Variable varName; Expression initializer = null; final int pos = SimpleCharStream.getPosition(); } { - varName = VariableDeclaratorId() [ initializer = Expression() ] + varName = Variable() [ initializer = Expression() ] { if (initializer == null) { return new VariableDeclaration(currentSegment, - new Variable(varName.toCharArray(),SimpleCharStream.getPosition()-varName.length(),SimpleCharStream.getPosition()), - pos, - SimpleCharStream.getPosition()); + varName, + pos, + SimpleCharStream.getPosition()); } return new VariableDeclaration(currentSegment, - new Variable(varName.toCharArray(),SimpleCharStream.getPosition()-varName.length(),SimpleCharStream.getPosition()), - initializer, - VariableDeclaration.EQUAL, - pos); + varName, + initializer, + VariableDeclaration.EQUAL, + pos); } } @@ -2317,6 +2400,9 @@ EmptyStatement EmptyStatement() : return new EmptyStatement(pos-1,pos);} } +/** + * used only by StatementExpressionList() which is used only by ForInit() and ForStatement() + */ Expression StatementExpression() : { final Expression expr,expr2; @@ -2557,7 +2643,7 @@ Expression Condition(final String keyword) : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length(); errorEnd = errorStart +1; - processParseException(e); + processParseExceptionDebug(e); } condition = Expression() try { @@ -2567,7 +2653,7 @@ Expression Condition(final String keyword) : errorLevel = ERROR; errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; errorEnd = SimpleCharStream.getPosition() + 1; - processParseException(e); + processParseExceptionDebug(e); } {return condition;} }