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 daf63e2..530693d 100644 --- a/net.sourceforge.phpeclipse/src/test/PHPParser.jj +++ b/net.sourceforge.phpeclipse/src/test/PHPParser.jj @@ -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 junit.framework.Assert; /** * A new php parser. @@ -151,7 +152,7 @@ public final class PHPParser extends PHPParserSuperclass { private static void processParseException(final ParseException e) { if (PARSER_DEBUG) { e.printStackTrace(); - return; + Assert.assertTrue(false); } if (errorMessage == null) { PHPeclipsePlugin.log(e); @@ -233,7 +234,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); @@ -765,11 +766,11 @@ FieldDeclaration FieldDeclaration() : { variableDeclaration = VariableDeclaratorNoSuffix() {arrayList.add(variableDeclaration); - outlineInfo.addVariable(new String(variableDeclaration.name));} + outlineInfo.addVariable(new String(variableDeclaration.name()));} ( variableDeclaration = VariableDeclaratorNoSuffix() {arrayList.add(variableDeclaration); - outlineInfo.addVariable(new String(variableDeclaration.name));} + outlineInfo.addVariable(new String(variableDeclaration.name()));} )* try { @@ -791,6 +792,7 @@ FieldDeclaration FieldDeclaration() : /** * a strict variable declarator : there cannot be a suffix here. + * It will be used by fields and formal parameters */ VariableDeclaration VariableDeclaratorNoSuffix() : { @@ -815,18 +817,21 @@ VariableDeclaration VariableDeclaratorNoSuffix() : { if (initializer == null) { return new VariableDeclaration(currentSegment, - varName.image.substring(1).toCharArray(), + new Variable(varName.image.substring(1).toCharArray(),SimpleCharStream.getPosition()-varName.image.length()-1,SimpleCharStream.getPosition()), pos, SimpleCharStream.getPosition()); } return new VariableDeclaration(currentSegment, - varName.image.substring(1).toCharArray(), + new Variable(varName.image.substring(1).toCharArray(),SimpleCharStream.getPosition()-varName.image.length()-1,SimpleCharStream.getPosition()), initializer, VariableDeclaration.EQUAL, pos); } } +/** + * this will be used by static statement + */ VariableDeclaration VariableDeclarator() : { final String varName; @@ -850,15 +855,15 @@ VariableDeclaration VariableDeclarator() : { if (initializer == null) { return new VariableDeclaration(currentSegment, - varName.toCharArray(), + new Variable(varName.substring(1).toCharArray(),SimpleCharStream.getPosition()-varName.length()-1,SimpleCharStream.getPosition()), pos, SimpleCharStream.getPosition()); } return new VariableDeclaration(currentSegment, - varName.toCharArray(), - initializer, - VariableDeclaration.EQUAL, - pos); + new Variable(varName.substring(1).toCharArray(),SimpleCharStream.getPosition()-varName.length()-1,SimpleCharStream.getPosition()), + initializer, + VariableDeclaration.EQUAL, + pos); } } @@ -1120,10 +1125,10 @@ Hashtable FormalParameters() : } [ var = FormalParameter() - {parameters.put(new String(var.name),var);} + {parameters.put(new String(var.name()),var);} ( var = FormalParameter() - {parameters.put(new String(var.name),var);} + {parameters.put(new String(var.name()),var);} )* ] try { @@ -1184,38 +1189,15 @@ Expression Expression() : final Expression expr; Expression initializer = null; final int pos = SimpleCharStream.getPosition(); -} -{ - expr = ConditionalExpression() {return expr;} -| expr = ExpressionWBang() {return expr;} -} - -Expression ExpressionWBang() : -{ - final Expression expr; - final int pos = SimpleCharStream.getPosition(); -} -{ - expr = ExpressionWBang() {return new PrefixedUnaryExpression(expr,OperatorIds.NOT,pos);} -| expr = ExpressionNoBang() {return expr;} -} - -Expression ExpressionNoBang() : -{ - Expression expr = null; int assignOperator = -1; - String var; - final int pos = SimpleCharStream.getPosition(); } { - expr = PrintExpression() {return expr;} -| expr = ListExpression() {return expr;} -| - var = VariableDeclaratorId() + LOOKAHEAD(1) + expr = ConditionalExpression() [ assignOperator = AssignmentOperator() try { - expr = Expression() + initializer = Expression() } catch (ParseException e) { if (errorMessage != null) { throw e; @@ -1227,19 +1209,41 @@ Expression ExpressionNoBang() : } ] { + char[] varName = expr.toStringExpression().substring(1).toCharArray(); if (assignOperator == -1) { - return new VariableDeclaration(currentSegment, - var.toCharArray(), - pos, - SimpleCharStream.getPosition()); + return new VariableDeclaration(currentSegment, + new Variable(varName,SimpleCharStream.getPosition()-varName.length-1,SimpleCharStream.getPosition()), + pos, + SimpleCharStream.getPosition()); + return expr; } return new VariableDeclaration(currentSegment, - var.toCharArray(), - expr, + new Variable(varName,SimpleCharStream.getPosition()-varName.length-1,SimpleCharStream.getPosition()), + initializer, assignOperator, pos); } {return expr;} +| expr = ExpressionWBang() {return expr;} +} + +Expression ExpressionWBang() : +{ + final Expression expr; + final int pos = SimpleCharStream.getPosition(); +} +{ + expr = ExpressionWBang() {return new PrefixedUnaryExpression(expr,OperatorIds.NOT,pos);} +| expr = ExpressionNoBang() {return expr;} +} + +Expression ExpressionNoBang() : +{ + Expression expr; +} +{ + expr = PrintExpression() {return expr;} +| expr = ListExpression() {return expr;} } /** @@ -1490,19 +1494,27 @@ Expression UnaryExpression() : expr = UnaryExpressionNoPrefix() {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;} } @@ -1528,6 +1540,9 @@ Expression UnaryExpressionNoPrefix() : | expr = UnaryExpressionNotPlusMinus() {return expr;} +/*| + LOOKAHEAD(2) + expr = PrintExpression() {return expr;}*/ } @@ -1617,30 +1632,47 @@ Expression PrimaryExpression() : final int pos = SimpleCharStream.getPosition(); } { - identifier = - {expr = new ConstantIdentifier(token.image.toCharArray(), - pos, - SimpleCharStream.getPosition());} + expr = PrimaryPrefix() (expr = PrimarySuffix(expr))* + [ expr = Arguments(expr) ] {return expr;} | - expr = ArrayDeclarator() + expr = ClassIdentifier() + {expr = new PrefixedUnaryExpression(expr, + OperatorIds.NEW, + pos); + } + [ expr = Arguments(expr) ] {return expr;} | - expr = ClassIdentifier() - {expr = new PrefixedUnaryExpression(expr,OperatorIds.NEW,pos);} - [expr = Arguments(expr)] + expr = ArrayDeclarator() {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 = Arguments(prefix) {return suffix;} -| suffix = VariableSuffix(prefix) {return suffix;} + suffix = VariableSuffix(prefix) {return suffix;} | expr = ClassIdentifier() {suffix = new ClassAccess(prefix, expr, @@ -1806,6 +1838,7 @@ final ArrayList list = new ArrayList(); /** * A Statement without break. + * @return a statement */ Statement StatementNoBreak() : { @@ -1814,34 +1847,11 @@ Statement StatementNoBreak() : } { LOOKAHEAD(2) - statement = Expression() - try { - - } catch (ParseException e) { - if (e.currentToken.next.kind != PHPParserConstants.PHPEND) { - errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected"; - errorLevel = ERROR; - errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; - errorEnd = SimpleCharStream.getPosition() + 1; - throw e; - } - } - {return statement;} + statement = expressionStatement() {return statement;} | LOOKAHEAD(1) - statement = LabeledStatement() {return statement;} -| statement = Block() {return statement;} -| statement = EmptyStatement() {return statement;} -/*| statement = StatementExpression() - try { - - } catch (ParseException e) { - errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected"; - errorLevel = ERROR; - errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; - errorEnd = SimpleCharStream.getPosition() + 1; - throw e; - } - {return statement;} */ + statement = LabeledStatement() {return statement;} +| statement = Block() {return statement;} +| statement = EmptyStatement() {return statement;} | statement = SwitchStatement() {return statement;} | statement = IfStatement() {return statement;} | statement = WhileStatement() {return statement;} @@ -1861,6 +1871,31 @@ Statement StatementNoBreak() : | statement = defineStatement() {currentSegment.add((Outlineable)statement);return statement;} } +/** + * A statement expression. + * expression ; + * @return an expression + */ +Statement expressionStatement() : +{ + final Statement statement; +} +{ + statement = Expression() + try { + + } catch (ParseException e) { + if (e.currentToken.next.kind != PHPParserConstants.PHPEND) { + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected"; + errorLevel = ERROR; + errorStart = SimpleCharStream.getPosition() - e.currentToken.next.image.length() + 1; + errorEnd = SimpleCharStream.getPosition() + 1; + throw e; + } + } + {return statement;} +} + Define defineStatement() : { final int start = SimpleCharStream.getPosition(); @@ -2148,8 +2183,8 @@ StaticStatement StaticStatement() : VariableDeclaration expr; } { - expr = VariableDeclarator() {vars.add(new String(expr.name));} - ( expr = VariableDeclarator() {vars.add(new String(expr.name));})* + expr = VariableDeclarator() {vars.add(new String(expr.name()));} + ( expr = VariableDeclarator() {vars.add(new String(expr.name()));})* try { { @@ -2247,6 +2282,9 @@ Statement BlockStatementNoBreak() : return statement;} } +/** + * used only by ForInit() + */ VariableDeclaration[] LocalVariableDeclaration() : { final ArrayList list = new ArrayList(); @@ -2262,6 +2300,9 @@ VariableDeclaration[] LocalVariableDeclaration() : return vars;} } +/** + * used only by LocalVariableDeclaration(). + */ VariableDeclaration LocalVariableDeclarator() : { final String varName; @@ -2273,12 +2314,12 @@ VariableDeclaration LocalVariableDeclarator() : { if (initializer == null) { return new VariableDeclaration(currentSegment, - varName.toCharArray(), + new Variable(varName.toCharArray(),SimpleCharStream.getPosition()-varName.length(),SimpleCharStream.getPosition()), pos, SimpleCharStream.getPosition()); } return new VariableDeclaration(currentSegment, - varName.toCharArray(), + new Variable(varName.toCharArray(),SimpleCharStream.getPosition()-varName.length(),SimpleCharStream.getPosition()), initializer, VariableDeclaration.EQUAL, pos); @@ -2295,6 +2336,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;