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 861d2c6..46fb115 100644 --- a/net.sourceforge.phpeclipse/src/test/PHPParser.jj +++ b/net.sourceforge.phpeclipse/src/test/PHPParser.jj @@ -127,7 +127,12 @@ public class PHPParser extends PHPParserSuperclass { */ private static void setMarker(ParseException e) { try { - setMarker(fileToParse, errorMessage, jj_input_stream.tokenBegin,jj_input_stream.tokenBegin+e.currentToken.image.length(), errorLevel); + setMarker(fileToParse, + errorMessage, + jj_input_stream.tokenBegin, + jj_input_stream.tokenBegin + e.currentToken.image.length(), + errorLevel, + "Line " + e.currentToken.beginLine); } catch (CoreException e2) { PHPeclipsePlugin.log(e2); } @@ -272,10 +277,14 @@ PARSER_END(PHPParser) "/*" : IN_MULTI_LINE_COMMENT } - -SPECIAL_TOKEN : + SPECIAL_TOKEN : +{ + : PHPPARSING +} + + TOKEN : { - " > : PHPPARSING + " > : DEFAULT } @@ -347,6 +356,8 @@ MORE : | < TRUE: "true" > | < WHILE: "while" > | < ENDWHILE : "endwhile" > +| +| } /* TYPES */ @@ -441,7 +452,7 @@ MORE : > | < #SPECIAL: - "_" + "_" | ["\u007f"-"\u00ff"] > } @@ -502,7 +513,9 @@ MORE : | >=" > -| >>=" > +| +| +| (token = | token = ) + {return "+" + token.image;} +| expr = ArrayDeclarator() {return expr;} +| + token = + {return token.image;} } String ArrayVariable() : @@ -847,6 +876,9 @@ String Type() : | {return "integer";} +| + + {return "object";} } String Expression() : @@ -867,7 +899,7 @@ String Expression() : } catch (ParseException e) { errorMessage = "expression expected"; errorLevel = ERROR; - throw generateParseException(); + throw e; } ] { @@ -898,8 +930,6 @@ String AssignmentOperator() : {return "<<=";} | {return ">>=";} -| -{return ">>>=";} | {return "&=";} | @@ -908,6 +938,8 @@ String AssignmentOperator() : {return "|=";} | {return ".=";} +| +{return "~=";} } String ConditionalExpression() : @@ -1078,7 +1110,12 @@ String EqualityExpression() : expr = RelationalExpression() {buff.append(expr);} ( - ( operator = | operator = ) expr2 = RelationalExpression() + ( operator = + | operator = + | operator = + | operator = + ) + expr2 = RelationalExpression() { buff.append(operator.image); buff.append(expr2); @@ -1165,15 +1202,34 @@ String MultiplicativeExpression() : {return buff.toString();} } +/** + * An unary expression starting with @, & or nothing + */ String UnaryExpression() : { String expr; Token token; + final StringBuffer buff = new StringBuffer(); } { - expr = UnaryExpression() - {return "@" + expr;} + token = expr = UnaryExpressionNoPrefix() + { + if (token == null) { + return expr; + } + return token.image + expr; + } | + ( {buff.append("@");})* expr = UnaryExpressionNoPrefix() + {return buff.append(expr).toString();} +} + +String UnaryExpressionNoPrefix() : +{ + String expr; + Token token; +} +{ ( token = | token = ) expr = UnaryExpression() { return token.image + expr; @@ -1189,6 +1245,7 @@ String UnaryExpression() : {return expr;} } + String PreIncrementExpression() : { String expr; @@ -1296,12 +1353,9 @@ String PrimaryPrefix() : token = {return token.image;} | - [token = ] expr = ClassIdentifier() + expr = ClassIdentifier() { - if (token == null) { - return "new " + expr; - } - return "new &" + expr; + return "new " + expr; } | expr = VariableDeclaratorId() @@ -1347,7 +1401,7 @@ String VariableSuffix() : } catch (ParseException e) { errorMessage = "']' expected"; errorLevel = ERROR; - throw generateParseException(); + throw e; } { if(expr == null) { @@ -1369,14 +1423,8 @@ String Literal() : token = {return token.image;} | - try { - token = + token = {return token.image;} - } catch (TokenMgrError e) { - errorMessage = "unterminated string"; - errorLevel = ERROR; - throw generateParseException(); - } | expr = BooleanLiteral() {return expr;} @@ -1489,6 +1537,8 @@ void Statement() : | ForStatement() | + ForeachStatement() +| BreakStatement() | ContinueStatement() @@ -1753,6 +1803,12 @@ void DoStatement() : } } +void ForeachStatement() : +{} +{ + Variable() Variable() [ Expression() ] Statement() +} + void ForStatement() : {} {