X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/test/PHPParser.jj b/net.sourceforge.phpeclipse/src/test/PHPParser.jj index e658989..b49b15a 100644 --- a/net.sourceforge.phpeclipse/src/test/PHPParser.jj +++ b/net.sourceforge.phpeclipse/src/test/PHPParser.jj @@ -50,6 +50,7 @@ import net.sourceforge.phpdt.internal.compiler.parser.PHPReqIncDeclaration; */ public final class PHPParser extends PHPParserSuperclass { + /** The file that is parsed. */ private static IFile fileToParse; /** The current segment */ @@ -58,9 +59,15 @@ public final class PHPParser extends PHPParserSuperclass { private static final String PARSE_ERROR_STRING = "Parse error"; //$NON-NLS-1$ private static final String PARSE_WARNING_STRING = "Warning"; //$NON-NLS-1$ PHPOutlineInfo outlineInfo; + + /** The error level of the current ParseException. */ private static int errorLevel = ERROR; + /** The message of the current ParseException. If it's null it's because the parse exception wasn't handled */ private static String errorMessage; + private static int errorStart = -1; + private static int errorEnd = -1; + public PHPParser() { } @@ -128,12 +135,23 @@ public final class PHPParser extends PHPParserSuperclass { */ private static void setMarker(final ParseException e) { try { - setMarker(fileToParse, - errorMessage, - jj_input_stream.tokenBegin, - jj_input_stream.tokenBegin + e.currentToken.image.length(), - errorLevel, - "Line " + e.currentToken.beginLine); + if (errorStart == -1) { + setMarker(fileToParse, + errorMessage, + jj_input_stream.tokenBegin, + jj_input_stream.tokenBegin + e.currentToken.image.length(), + errorLevel, + "Line " + e.currentToken.beginLine); + } else { + setMarker(fileToParse, + errorMessage, + errorStart, + errorEnd, + errorLevel, + "Line " + e.currentToken.beginLine); + errorStart = -1; + errorEnd = -1; + } } catch (CoreException e2) { PHPeclipsePlugin.log(e2); } @@ -249,9 +267,9 @@ PARSER_END(PHPParser) TOKEN : { - : PHPPARSING + : PHPPARSING | : PHPPARSING -| { input_stream.backup(1); } : IN_FORMAL_COMMENT | "/*" : IN_MULTI_LINE_COMMENT @@ -578,18 +598,19 @@ void PhpBlock() : Expression() [ ] | [ - | - {try { - setMarker(fileToParse, - "You should use ' + {try { + setMarker(fileToParse, + "You should use ' } catch (ParseException e) { @@ -609,10 +630,28 @@ void ClassDeclaration() : { final PHPClassDeclaration classDeclaration; final Token className; - final int pos = jj_input_stream.bufpos; + final int pos; } { - className = [ ] + + try { + {pos = jj_input_stream.bufpos;} + className = + } catch (ParseException e) { + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected"; + errorLevel = ERROR; + throw e; + } + [ + + try { + + } catch (ParseException e) { + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected"; + errorLevel = ERROR; + throw e; + } + ] { if (currentSegment != null) { classDeclaration = new PHPClassDeclaration(currentSegment,className.image,pos); @@ -687,7 +726,7 @@ void FieldDeclaration() : PHPVarDeclaration VariableDeclarator() : { final String varName; - String varValue = null; + String varValue; final int pos = jj_input_stream.bufpos; } { @@ -831,7 +870,17 @@ void MethodDeclaration() : final PHPFunctionDeclaration functionDeclaration; } { - functionDeclaration = MethodDeclarator() + + try { + functionDeclaration = MethodDeclarator() + } catch (ParseException e) { + if (errorMessage != null) { + throw e; + } + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function identifier expected"; + errorLevel = ERROR; + throw e; + } { if (currentSegment != null) { currentSegment.add(functionDeclaration); @@ -1144,7 +1193,13 @@ String EqualityExpression() : | operator = | operator = ) - expr = RelationalExpression() + try { + expr = RelationalExpression() + } catch (ParseException e) { + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected after '"+operator.image+"'"; + errorLevel = ERROR; + throw e; + } { buff.append(operator.image); buff.append(expr); @@ -1305,7 +1360,14 @@ String UnaryExpressionNotPlusMinus() : expr = Literal() {return expr;} | - expr = Expression() + expr = Expression() + try { + + } catch (ParseException e) { + errorMessage = "')' expected"; + errorLevel = ERROR; + throw e; + } {return "("+expr+")";} } @@ -1414,7 +1476,14 @@ String VariableSuffix() : String expr = null; } { - expr = VariableName() + + try { + expr = VariableName() + } catch (ParseException e) { + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function call or field access expected"; + errorLevel = ERROR; + throw e; + } {return "->" + expr;} | [ expr = Expression() ] @@ -1481,7 +1550,7 @@ String expr = null; try { } catch (ParseException e) { - errorMessage = "')' expected to close the argument list"; + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected to close the argument list"; errorLevel = ERROR; throw e; } @@ -1516,17 +1585,16 @@ final StringBuffer buff = new StringBuffer(); {return buff.toString();} } -/* - * Statement syntax follows. +/** + * A Statement without break */ - -void Statement() : +void StatementNoBreak() : {} { LOOKAHEAD(2) Expression() try { - ( | ) + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected"; errorLevel = ERROR; @@ -1561,8 +1629,6 @@ void Statement() : | ForeachStatement() | - BreakStatement() -| ContinueStatement() | ReturnStatement() @@ -1576,6 +1642,17 @@ void Statement() : GlobalStatement() } +/** + * A Normal statement + */ +void Statement() : +{} +{ + StatementNoBreak() +| + BreakStatement() +} + void IncludeStatement() : { final String expr; @@ -1590,7 +1667,7 @@ void IncludeStatement() : } } try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected"; errorLevel = ERROR; @@ -1605,7 +1682,7 @@ void IncludeStatement() : } } try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected"; errorLevel = ERROR; @@ -1620,7 +1697,7 @@ void IncludeStatement() : } } try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected"; errorLevel = ERROR; @@ -1635,7 +1712,7 @@ void IncludeStatement() : } } try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected"; errorLevel = ERROR; @@ -1662,22 +1739,39 @@ String ListExpression() : String expr; } { - + + try { + + } catch (ParseException e) { + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', '(' expected"; + errorLevel = ERROR; + throw e; + } [ expr = VariableDeclaratorId() {buff.append(expr);} ] - - {buff.append(",");} [ + try { + + } catch (ParseException e) { + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ',' expected"; + errorLevel = ERROR; + throw e; + } expr = VariableDeclaratorId() - {buff.append(expr);} + {buff.append(",").append(expr);} ] - - { - buff.append(")"); - return buff.toString(); + {buff.append(")");} + try { + + } catch (ParseException e) { + errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', ')' expected"; + errorLevel = ERROR; + throw e; } + [ expr = Expression() {buff.append("(").append(expr);}] + {return buff.toString();} } void EchoStatement() : @@ -1685,7 +1779,7 @@ void EchoStatement() : { Expression() ( Expression())* try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected after 'echo' statement"; errorLevel = ERROR; @@ -1698,7 +1792,7 @@ void GlobalStatement() : { VariableDeclaratorId() ( VariableDeclaratorId())* try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected"; errorLevel = ERROR; @@ -1711,7 +1805,7 @@ void StaticStatement() : { VariableDeclarator() ( VariableDeclarator())* try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected"; errorLevel = ERROR; @@ -1736,7 +1830,13 @@ void Block() : throw e; } ( BlockStatement() )* - + try { + + } catch (ParseException e) { + errorMessage = "unexpected token : '"+ e.currentToken.image +"', '}' expected"; + errorLevel = ERROR; + throw e; + } } void BlockStatement() : @@ -1749,6 +1849,19 @@ void BlockStatement() : MethodDeclaration() } +/** + * A Block statement that will not contain any 'break' + */ +void BlockStatementNoBreak() : +{} +{ + StatementNoBreak() +| + ClassDeclaration() +| + MethodDeclaration() +} + void LocalVariableDeclaration() : {} { @@ -1815,8 +1928,8 @@ void SwitchStatement() : } ( line = SwitchLabel() - ( BlockStatement() )* - [ breakToken = ] + ( BlockStatementNoBreak() )* + [ breakToken = BreakStatement() ] { try { if (breakToken == null) { @@ -1840,6 +1953,22 @@ void SwitchStatement() : } } +Token BreakStatement() : +{ + final Token token; +} +{ + token = [ Expression() ] + try { + + } catch (ParseException e) { + errorMessage = "';' expected after 'break' keyword"; + errorLevel = ERROR; + throw e; + } + {return token;} +} + int SwitchLabel() : { final Token token; @@ -1904,8 +2033,7 @@ void Condition(final String keyword) : } void IfStatement0(final int start,final int end) : -{ -} +{} { (Statement())* (ElseIfStatementColon())* [ElseStatementColon()] @@ -1929,7 +2057,7 @@ void IfStatement0(final int start,final int end) : try { } catch (ParseException e) { - errorMessage = "';' expected 'endif' keyword"; + errorMessage = "';' expected after 'endif' keyword"; errorLevel = ERROR; throw e; } @@ -1986,7 +2114,7 @@ void WhileStatement0(final int start, final int end) : throw e; } try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected after 'endwhile' keyword"; errorLevel = ERROR; @@ -2001,7 +2129,7 @@ void DoStatement() : { Statement() Condition("while") try { - ( | "?>") + ( | {PHPParserTokenManager.SwitchTo(PHPParserTokenManager.DEFAULT);}) } catch (ParseException e) { errorMessage = "';' expected"; errorLevel = ERROR; @@ -2074,7 +2202,7 @@ final int pos = jj_input_stream.bufpos; errorLevel = ERROR; throw e; } - [ ForInit() ] [ Expression() ] [ ForUpdate() ] + [ ForInit() ] [ Expression() ] [ StatementExpressionList() ] ( Statement() | @@ -2101,7 +2229,7 @@ final int pos = jj_input_stream.bufpos; try { } catch (ParseException e) { - errorMessage = "';' expected 'endfor' keyword"; + errorMessage = "';' expected after 'endfor' keyword"; errorLevel = ERROR; throw e; } @@ -2123,26 +2251,28 @@ void StatementExpressionList() : StatementExpression() ( StatementExpression() )* } -void ForUpdate() : -{} -{ - StatementExpressionList() -} - -void BreakStatement() : -{} -{ - [ ] -} - void ContinueStatement() : {} { - [ ] + [ ] + try { + + } catch (ParseException e) { + errorMessage = "';' expected after 'continue' statement"; + errorLevel = ERROR; + throw e; + } } void ReturnStatement() : {} { - [ Expression() ] + [ Expression() ] + try { + + } catch (ParseException e) { + errorMessage = "';' expected after 'return' statement"; + errorLevel = ERROR; + throw e; + } } \ No newline at end of file