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 17511d5..af9d369 100644 --- a/net.sourceforge.phpeclipse/src/test/PHPParser.jj +++ b/net.sourceforge.phpeclipse/src/test/PHPParser.jj @@ -47,6 +47,7 @@ import net.sourceforge.phpdt.internal.compiler.parser.PHPOutlineInfo; * given with JavaCC. You can get JavaCC at http://www.webgain.com * You can test the parser with the PHPParserTestCase2.java * @author Matthieu Casanova + * @version $Reference: 1.0$ */ public final class PHPParser extends PHPParserSuperclass { @@ -108,12 +109,12 @@ public final class PHPParser extends PHPParserSuperclass { * Add an php node on the stack. * @param node the node that will be added to the stack */ - private static final void pushOnAstNodes(AstNode node) { + private static final void pushOnAstNodes(final AstNode node) { try { nodes[++nodePtr] = node; } catch (IndexOutOfBoundsException e) { - int oldStackLength = nodes.length; - AstNode[] oldStack = nodes; + final int oldStackLength = nodes.length; + final AstNode[] oldStack = nodes; nodes = new AstNode[oldStackLength + AstStackIncrement]; System.arraycopy(oldStack, 0, nodes, 0, oldStackLength); nodePtr = oldStackLength; @@ -158,6 +159,7 @@ public final class PHPParser extends PHPParserSuperclass { } setMarker(e); errorMessage = null; + if (PHPeclipsePlugin.DEBUG) PHPeclipsePlugin.log(e); } /** @@ -270,7 +272,7 @@ public final class PHPParser extends PHPParserSuperclass { */ public static final void createNewHTMLCode() { final int currentPosition = SimpleCharStream.getPosition(); - if (currentPosition == htmlStart) { + if (currentPosition == htmlStart || currentPosition > SimpleCharStream.currentBuffer.length()) { return; } final char[] chars = SimpleCharStream.currentBuffer.substring(htmlStart,currentPosition+1).toCharArray(); @@ -500,16 +502,16 @@ MORE : <#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ > | | | )> -| -| -| +| +| +| } /* IDENTIFIERS */ TOKEN : { - < IDENTIFIER: (|) (||)* > + |) (||)* > | < #LETTER: ["a"-"z"] | ["A"-"Z"] @@ -636,7 +638,7 @@ PHPEchoBlock phpEchoBlock() : { final Expression expr; final int pos = SimpleCharStream.getPosition(); - PHPEchoBlock echoBlock; + final PHPEchoBlock echoBlock; } { expr = Expression() [ ] @@ -655,8 +657,7 @@ void Php() : ClassDeclaration ClassDeclaration() : { final ClassDeclaration classDeclaration; - final Token className; - Token superclassName = null; + final Token className,superclassName; final int pos; char[] classNameImage = SYNTAX_ERROR_CHAR; char[] superclassNameImage = null; @@ -711,7 +712,7 @@ ClassDeclaration ClassDeclaration() : return classDeclaration;} } -void ClassBody(ClassDeclaration classDeclaration) : +void ClassBody(final ClassDeclaration classDeclaration) : {} { try { @@ -738,10 +739,10 @@ void ClassBody(ClassDeclaration classDeclaration) : /** * A class can contain only methods and fields. */ -void ClassBodyDeclaration(ClassDeclaration classDeclaration) : +void ClassBodyDeclaration(final ClassDeclaration classDeclaration) : { - MethodDeclaration method; - FieldDeclaration field; + final MethodDeclaration method; + final FieldDeclaration field; } { method = MethodDeclaration() {classDeclaration.addMethod(method);} @@ -754,7 +755,7 @@ void ClassBodyDeclaration(ClassDeclaration classDeclaration) : FieldDeclaration FieldDeclaration() : { VariableDeclaration variableDeclaration; - VariableDeclaration[] list; + final VariableDeclaration[] list; final ArrayList arrayList = new ArrayList(); final int pos = SimpleCharStream.getPosition(); } @@ -824,9 +825,8 @@ VariableDeclaration VariableDeclarator() : */ String VariableDeclaratorId() : { - String expr; + final String expr; Expression expression = null; - final StringBuffer buff = new StringBuffer(); final int pos = SimpleCharStream.getPosition(); ConstantIdentifier ex; } @@ -889,7 +889,7 @@ String Variable(): String VariableName(): { final StringBuffer buff; - String expr = null; + final String expr; Expression expression = null; final Token token; } @@ -955,7 +955,7 @@ Expression VariableInitializer() : ArrayVariableDeclaration ArrayVariable() : { -Expression expr,expr2; +final Expression expr,expr2; } { expr = Expression() @@ -980,7 +980,7 @@ ArrayVariableDeclaration[] ArrayInitializer() : [ {list.add(null);}] { - ArrayVariableDeclaration[] vars = new ArrayVariableDeclaration[list.size()]; + final ArrayVariableDeclaration[] vars = new ArrayVariableDeclaration[list.size()]; list.toArray(vars); return vars;} } @@ -1131,48 +1131,47 @@ ConstantIdentifier Type() : Expression Expression() : { final Expression expr; + Expression initializer = null; + int assignOperator = -1; + final int pos = SimpleCharStream.getPosition(); } { - expr = PrintExpression() {return expr;} -| expr = ListExpression() {return expr;} -| LOOKAHEAD(varAssignation()) - expr = varAssignation() {return expr;} -| expr = ConditionalExpression() {return expr;} + LOOKAHEAD(2) + expr = ConditionalExpression() [ assignOperator = AssignmentOperator() initializer = Expression() ] + { + if (assignOperator == -1) return expr; + return new VarAssignation(expr, + initializer, + assignOperator, + pos, + SimpleCharStream.getPosition()); + return expr;} +| expr = ExpressionWBang() {return expr;} } -/** - * A Variable assignation. - * varName (an assign operator) any expression - */ -VarAssignation varAssignation() : +Expression ExpressionWBang() : { - String varName; - final Expression initializer; - final int assignOperator; + final Expression expr; final int pos = SimpleCharStream.getPosition(); } { - varName = VariableDeclaratorId() - assignOperator = AssignmentOperator() - try { - initializer = Expression() - } catch (ParseException e) { - if (errorMessage != null) { - throw e; - } - errorMessage = "expression expected"; - errorLevel = ERROR; - errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; - errorEnd = SimpleCharStream.getPosition() + 1; - throw e; - } - {return new VarAssignation(varName.toCharArray(), - initializer, - assignOperator, - pos, - SimpleCharStream.getPosition());} + expr = ExpressionWBang() {return new PrefixedUnaryExpression(expr,OperatorIds.NOT,pos);} +| expr = ExpressionNoBang() {return expr;} } +Expression ExpressionNoBang() : +{ + final Expression expr; +} +{ + expr = PrintExpression() {return expr;} +| expr = ListExpression() {return expr;} +} + +/** + * Any assignement operator. + * @return the assignement operator id + */ int AssignmentOperator() : {} { @@ -1407,7 +1406,7 @@ Expression MultiplicativeExpression() : */ Expression UnaryExpression() : { - Expression expr; + final Expression expr; final int pos = SimpleCharStream.getPosition(); } { @@ -1419,7 +1418,7 @@ Expression UnaryExpression() : Expression AtUnaryExpression() : { - Expression expr; + final Expression expr; final int pos = SimpleCharStream.getPosition(); } { @@ -1434,8 +1433,8 @@ Expression AtUnaryExpression() : Expression UnaryExpressionNoPrefix() : { - Expression expr; - int operator; + final Expression expr; + final int operator; final int pos = SimpleCharStream.getPosition(); } { @@ -1467,13 +1466,13 @@ final int operator; Expression UnaryExpressionNotPlusMinus() : { - Expression expr; + final Expression expr; final int pos = SimpleCharStream.getPosition(); } { - expr = UnaryExpression() {return new PrefixedUnaryExpression(expr,OperatorIds.NOT,pos);} -| LOOKAHEAD( (Type() | ) ) + LOOKAHEAD( (Type() | ) ) expr = CastExpression() {return expr;} +| expr = UnaryExpression() {return new PrefixedUnaryExpression(expr,OperatorIds.NOT,pos);} | expr = PostfixExpression() {return expr;} | expr = Literal() {return expr;} | expr = Expression() @@ -1505,7 +1504,7 @@ final int pos = SimpleCharStream.getPosition(); Expression PostfixExpression() : { - Expression expr; + final Expression expr; int operator = -1; final int pos = SimpleCharStream.getPosition(); } @@ -1528,18 +1527,6 @@ Expression PrimaryExpression() : final int pos = SimpleCharStream.getPosition(); } { - LOOKAHEAD(2) - identifier = expr = ClassIdentifier() - {expr = new ClassAccess(new ConstantIdentifier(identifier.image.toCharArray(), - pos, - SimpleCharStream.getPosition()), - expr, - ClassAccess.STATIC);} - ( - LOOKAHEAD(PrimarySuffix()) - expr = PrimarySuffix(expr))* - {return expr;} -| expr = PrimaryPrefix() ( LOOKAHEAD(PrimarySuffix()) @@ -1550,21 +1537,6 @@ Expression PrimaryExpression() : {return expr;} } -/** - * An array declarator. - * array(vars) - * @return an array - */ -ArrayInitializer ArrayDeclarator() : -{ - final ArrayVariableDeclaration[] vars; - final int pos = SimpleCharStream.getPosition(); -} -{ - vars = ArrayInitializer() - {return new ArrayInitializer(vars,pos,SimpleCharStream.getPosition());} -} - Expression PrimaryPrefix() : { final Expression expr; @@ -1585,6 +1557,36 @@ Expression PrimaryPrefix() : SimpleCharStream.getPosition());} } +AbstractSuffixExpression PrimarySuffix(final Expression prefix) : +{ + final AbstractSuffixExpression suffix; + final Expression expr; +} +{ + suffix = Arguments(prefix) {return suffix;} +| suffix = VariableSuffix(prefix) {return suffix;} +| expr = ClassIdentifier() + {suffix = new ClassAccess(prefix, + expr, + ClassAccess.STATIC); + return suffix;} +} + +/** + * An array declarator. + * array(vars) + * @return an array + */ +ArrayInitializer ArrayDeclarator() : +{ + final ArrayVariableDeclaration[] vars; + final int pos = SimpleCharStream.getPosition(); +} +{ + vars = ArrayInitializer() + {return new ArrayInitializer(vars,pos,SimpleCharStream.getPosition());} +} + PrefixedUnaryExpression classInstantiation() : { Expression expr; @@ -1611,26 +1613,19 @@ ConstantIdentifier ClassIdentifier(): final String 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());} } -AbstractSuffixExpression PrimarySuffix(Expression prefix) : -{ - final AbstractSuffixExpression expr; -} -{ - expr = Arguments(prefix) {return expr;} -| expr = VariableSuffix(prefix) {return expr;} -} - -AbstractSuffixExpression VariableSuffix(Expression prefix) : +AbstractSuffixExpression VariableSuffix(final Expression prefix) : { String expr = null; final int pos = SimpleCharStream.getPosition(); @@ -1684,7 +1679,7 @@ Literal Literal() : return new NullLiteral(pos-4,pos);} } -FunctionCall Arguments(Expression func) : +FunctionCall Arguments(final Expression func) : { Expression[] args = null; } @@ -1728,7 +1723,7 @@ final ArrayList list = new ArrayList(); } )* { - Expression[] arguments = new Expression[list.size()]; + final Expression[] arguments = new Expression[list.size()]; list.toArray(arguments); return arguments;} } @@ -1825,10 +1820,7 @@ Define defineStatement() : processParseException(e); } try { - ( defineValue = PrintExpression() - | LOOKAHEAD(varAssignation()) - defineValue = varAssignation() - | defineValue = ConditionalExpression()) + defineValue = Expression() } catch (ParseException e) { errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected"; errorLevel = ERROR; @@ -1870,8 +1862,8 @@ Statement Statement() : HTMLBlock htmlBlock() : { final int startIndex = nodePtr; - AstNode[] blockNodes; - int nbNodes; + final AstNode[] blockNodes; + final int nbNodes; } { (phpEchoBlock())* @@ -1949,8 +1941,8 @@ PrintExpression PrintExpression() : ListExpression ListExpression() : { String expr = null; - Expression expression = null; - ArrayList list = new ArrayList(); + final Expression expression; + final ArrayList list = new ArrayList(); final int pos = SimpleCharStream.getPosition(); } { @@ -1979,8 +1971,7 @@ ListExpression ListExpression() : errorEnd = SimpleCharStream.getPosition() + 1; throw e; } - expr = VariableDeclaratorId() - {list.add(expr);} + [expr = VariableDeclaratorId() {list.add(expr);}] )* try { @@ -1993,7 +1984,7 @@ ListExpression ListExpression() : } [ expression = Expression() { - String[] strings = new String[list.size()]; + final String[] strings = new String[list.size()]; list.toArray(strings); return new ListExpression(strings, expression, @@ -2001,7 +1992,7 @@ ListExpression ListExpression() : SimpleCharStream.getPosition());} ] { - String[] strings = new String[list.size()]; + final String[] strings = new String[list.size()]; list.toArray(strings); return new ListExpression(strings,pos,SimpleCharStream.getPosition());} } @@ -2034,7 +2025,7 @@ EchoStatement EchoStatement() : throw e; } } - {Expression[] exprs = new Expression[expressions.size()]; + {final Expression[] exprs = new Expression[expressions.size()]; expressions.toArray(exprs); return new EchoStatement(exprs,pos);} } @@ -2043,8 +2034,8 @@ GlobalStatement GlobalStatement() : { final int pos = SimpleCharStream.getPosition(); String expr; - ArrayList vars = new ArrayList(); - GlobalStatement global; + final ArrayList vars = new ArrayList(); + final GlobalStatement global; } { @@ -2057,7 +2048,7 @@ GlobalStatement GlobalStatement() : try { { - String[] strings = new String[vars.size()]; + final String[] strings = new String[vars.size()]; vars.toArray(strings); global = new GlobalStatement(currentSegment, strings, @@ -2086,7 +2077,7 @@ StaticStatement StaticStatement() : try { { - String[] strings = new String[vars.size()]; + final String[] strings = new String[vars.size()]; vars.toArray(strings); return new StaticStatement(strings, pos, @@ -2146,7 +2137,7 @@ Block Block() : throw e; } { - Statement[] statements = new Statement[list.size()]; + final Statement[] statements = new Statement[list.size()]; list.toArray(statements); return new Block(statements,pos,SimpleCharStream.getPosition());} } @@ -2156,17 +2147,8 @@ Statement BlockStatement() : final Statement statement; } { - try { statement = Statement() {if (phpDocument == currentSegment) pushOnAstNodes(statement); return statement;} - } catch (ParseException e) { - if (errorMessage != null) throw e; - errorMessage = "statement expected"; - errorLevel = ERROR; - errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; - errorEnd = SimpleCharStream.getPosition() + 1; - throw e; - } | statement = ClassDeclaration() {return statement;} | statement = MethodDeclaration() {if (phpDocument == currentSegment) pushOnAstNodes(statement); currentSegment.add((MethodDeclaration) statement); @@ -2197,7 +2179,7 @@ VariableDeclaration[] LocalVariableDeclaration() : {list.add(var);} ( var = LocalVariableDeclarator() {list.add(var);})* { - VariableDeclaration[] vars = new VariableDeclaration[list.size()]; + final VariableDeclaration[] vars = new VariableDeclaration[list.size()]; list.toArray(vars); return vars;} } @@ -2236,8 +2218,8 @@ EmptyStatement EmptyStatement() : Expression StatementExpression() : { - Expression expr,expr2; - int operator; + final Expression expr,expr2; + final int operator; } { expr = PreIncDecExpression() {return expr;} @@ -2308,7 +2290,7 @@ AbstractCase[] switchStatementBrace() : try { { - AbstractCase[] abcase = new AbstractCase[cases.size()]; + final AbstractCase[] abcase = new AbstractCase[cases.size()]; cases.toArray(abcase); return abcase;} } catch (ParseException e) { @@ -2354,7 +2336,7 @@ AbstractCase[] switchStatementColon(final int start, final int end) : try { { - AbstractCase[] abcase = new AbstractCase[cases.size()]; + final AbstractCase[] abcase = new AbstractCase[cases.size()]; cases.toArray(abcase); return abcase;} } catch (ParseException e) { @@ -2379,7 +2361,7 @@ AbstractCase switchLabel0() : | statement = htmlBlock() {stmts.add(statement);})* [ statement = BreakStatement() {stmts.add(statement);}] { - Statement[] stmtsArray = new Statement[stmts.size()]; + final Statement[] stmtsArray = new Statement[stmts.size()]; stmts.toArray(stmtsArray); if (expr == null) {//it's a default return new DefaultCase(stmtsArray,pos,SimpleCharStream.getPosition()); @@ -2455,8 +2437,8 @@ Break BreakStatement() : IfStatement IfStatement() : { final int pos = SimpleCharStream.getPosition(); - Expression condition; - IfStatement ifStatement; + final Expression condition; + final IfStatement ifStatement; } { condition = Condition("if") ifStatement = IfStatement0(condition, pos,pos+2) @@ -2491,18 +2473,18 @@ Expression Condition(final String keyword) : {return condition;} } -IfStatement IfStatement0(Expression condition, final int start,final int end) : +IfStatement IfStatement0(final Expression condition, final int start,final int end) : { Statement statement; - Statement stmt; + final Statement stmt; final Statement[] statementsArray; ElseIf elseifStatement; Else elseStatement = null; - ArrayList stmts; + final ArrayList stmts; final ArrayList elseIfList = new ArrayList(); - ElseIf[] elseIfs; + final ElseIf[] elseIfs; int pos = SimpleCharStream.getPosition(); - int endStatements; + final int endStatements; } { @@ -2596,7 +2578,7 @@ IfStatement IfStatement0(Expression condition, final int start,final int end) : ElseIf ElseIfStatementColon() : { - Expression condition; + final Expression condition; Statement statement; final ArrayList list = new ArrayList(); final int pos = SimpleCharStream.getPosition(); @@ -2606,7 +2588,7 @@ ElseIf ElseIfStatementColon() : ( statement = Statement() {list.add(statement);} | statement = htmlBlock() {list.add(statement);})* { - Statement[] stmtsArray = new Statement[list.size()]; + final Statement[] stmtsArray = new Statement[list.size()]; list.toArray(stmtsArray); return new ElseIf(condition,stmtsArray ,pos,SimpleCharStream.getPosition());} } @@ -2621,22 +2603,22 @@ Else ElseStatementColon() : ( statement = Statement() {list.add(statement);} | statement = htmlBlock() {list.add(statement);})* { - Statement[] stmtsArray = new Statement[list.size()]; + final Statement[] stmtsArray = new Statement[list.size()]; list.toArray(stmtsArray); return new Else(stmtsArray,pos,SimpleCharStream.getPosition());} } ElseIf ElseIfStatement() : { - Expression condition; - Statement statement; + final Expression condition; + final Statement statement; final ArrayList list = new ArrayList(); final int pos = SimpleCharStream.getPosition(); } { condition = Condition("elseif") statement = Statement() {list.add(statement);/*todo:do better*/} { - Statement[] stmtsArray = new Statement[list.size()]; + final Statement[] stmtsArray = new Statement[list.size()]; list.toArray(stmtsArray); return new ElseIf(condition,stmtsArray,pos,SimpleCharStream.getPosition());} } @@ -2684,7 +2666,7 @@ Statement WhileStatement0(final int start, final int end) : try { { - Statement[] stmtsArray = new Statement[stmts.size()]; + final Statement[] stmtsArray = new Statement[stmts.size()]; stmts.toArray(stmtsArray); return new Block(stmtsArray,pos,SimpleCharStream.getPosition());} } catch (ParseException e) { @@ -2848,7 +2830,7 @@ final int startBlock, endBlock; try { { - Statement[] stmtsArray = new Statement[list.size()]; + final Statement[] stmtsArray = new Statement[list.size()]; list.toArray(stmtsArray); return new ForStatement(initializations,condition,increments,new Block(stmtsArray,startBlock,endBlock),pos,SimpleCharStream.getPosition());} } catch (ParseException e) { @@ -2863,7 +2845,7 @@ final int startBlock, endBlock; Expression[] ForInit() : { - Expression[] exprs; + final Expression[] exprs; } { LOOKAHEAD(LocalVariableDeclaration()) @@ -2877,13 +2859,13 @@ Expression[] ForInit() : Expression[] StatementExpressionList() : { final ArrayList list = new ArrayList(); - Expression expr; + final Expression expr; } { expr = StatementExpression() {list.add(expr);} ( StatementExpression() {list.add(expr);})* { - Expression[] exprsArray = new Expression[list.size()]; + final Expression[] exprsArray = new Expression[list.size()]; list.toArray(exprsArray); return exprsArray;} }