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 9bf7ec4..861d2c6 100644 --- a/net.sourceforge.phpeclipse/src/test/PHPParser.jj +++ b/net.sourceforge.phpeclipse/src/test/PHPParser.jj @@ -38,6 +38,8 @@ import net.sourceforge.phpdt.internal.compiler.parser.PHPOutlineInfo; import net.sourceforge.phpdt.internal.compiler.parser.PHPSegmentWithChildren; import net.sourceforge.phpdt.internal.compiler.parser.PHPFunctionDeclaration; import net.sourceforge.phpdt.internal.compiler.parser.PHPClassDeclaration; +import net.sourceforge.phpdt.internal.compiler.parser.PHPVarDeclaration; +import net.sourceforge.phpdt.internal.compiler.parser.PHPReqIncDeclaration; /** * A new php parser. @@ -55,9 +57,6 @@ public 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$ - public static final int ERROR = 2; - public static final int WARNING = 1; - public static final int INFO = 0; PHPOutlineInfo outlineInfo; private static int errorLevel = ERROR; private static String errorMessage; @@ -104,45 +103,33 @@ public class PHPParser extends PHPParserSuperclass { try { parse(); } catch (ParseException e) { - if (errorMessage == null) { - PHPeclipsePlugin.log(e); - } else { - setMarker(errorMessage, e.currentToken.beginLine, errorLevel); - errorMessage = null; - } + processParseException(e); } return outlineInfo; } - /** - * Create marker for the parse error + * 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 setMarker(String message, int lineNumber, int errorLevel) { - try { - setMarker(fileToParse, message, lineNumber, errorLevel); - } catch (CoreException e) { + private static void processParseException(final ParseException e) { + if (errorMessage == null) { PHPeclipsePlugin.log(e); + errorMessage = "this exception wasn't handled by the parser please tell us how to reproduce it"; } + setMarker(e); + errorMessage = null; } - public static void setMarker(IFile file, String message, int lineNumber, int errorLevel) throws CoreException { - if (file != null) { - Hashtable attributes = new Hashtable(); - MarkerUtilities.setMessage(attributes, message); - switch (errorLevel) { - case ERROR : - attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_ERROR)); - break; - case WARNING : - attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_WARNING)); - break; - case INFO : - attributes.put(IMarker.SEVERITY, new Integer(IMarker.SEVERITY_INFO)); - break; - } - MarkerUtilities.setLineNumber(attributes, lineNumber); - MarkerUtilities.createMarker(file, attributes, IMarker.PROBLEM); + /** + * Create marker for the parse error + */ + private static void setMarker(ParseException e) { + try { + setMarker(fileToParse, errorMessage, jj_input_stream.tokenBegin,jj_input_stream.tokenBegin+e.currentToken.image.length(), errorLevel); + } catch (CoreException e2) { + PHPeclipsePlugin.log(e2); } } @@ -214,12 +201,7 @@ public class PHPParser extends PHPParserSuperclass { try { parse(); } catch (ParseException e) { - if (errorMessage == null) { - PHPeclipsePlugin.log(e); - } else { - setMarker(errorMessage, e.currentToken.beginLine, errorLevel); - errorMessage = null; - } + processParseException(e); } } @@ -416,20 +398,30 @@ MORE : < STRING_LITERAL: ( | | )> | < STRING_1: "\"" - ( (~["\""]) - | "\\\"" + ( + ~["\""] + | + "\\\"" )* "\"" > | < STRING_2: "'" - ( (~["'"]))* + ( + ~["'"] + | + "\\'" + )* "'" > | < STRING_3: "`" - ( (~["`"]))* + ( + ~["`"] + | + "\\`" + )* "`" > } @@ -474,43 +466,43 @@ MORE : { | -| < ASSIGN: "=" > -| < GT: ">" > -| < LT: "<" > -| < BANG: "!" > -| < HOOK: "?" > -| < COLON: ":" > -| < EQ: "==" > -| < LE: "<=" > -| < GE: ">=" > -| < NE: "!=" > -| < SC_OR: "||" > -| < SC_AND: "&&" > -| < INCR: "++" > -| < DECR: "--" > -| < PLUS: "+" > -| < MINUS: "-" > -| < STAR: "*" > -| < SLASH: "/" > -| < BIT_AND: "&" > -| < BIT_OR: "|" > -| < XOR: "^" > -| < REM: "%" > -| < LSHIFT: "<<" > -| < RSIGNEDSHIFT: ">>" > -| < RUNSIGNEDSHIFT: ">>>" > -| < PLUSASSIGN: "+=" > -| < MINUSASSIGN: "-=" > -| < STARASSIGN: "*=" > -| < SLASHASSIGN: "/=" > -| < ANDASSIGN: "&=" > -| < ORASSIGN: "|=" > -| < XORASSIGN: "^=" > -| < DOTASSIGN: ".=" > -| < REMASSIGN: "%=" > -| < LSHIFTASSIGN: "<<=" > -| < RSIGNEDSHIFTASSIGN: ">>=" > -| < RUNSIGNEDSHIFTASSIGN: ">>>=" > +| " > +| +| +| +| +| +| =" > +| +| +| +| +| +| +| +| +| +| +| +| +| +| >" > +| >>" > +| +| >=" > +| >>=" > } TOKEN : @@ -568,7 +560,21 @@ void ClassDeclaration() : void ClassBody() : {} { - ( ClassBodyDeclaration() )* + try { + + } catch (ParseException e) { + errorMessage = "'{' expected"; + errorLevel = ERROR; + throw e; + } + ( ClassBodyDeclaration() )* + try { + + } catch (ParseException e) { + errorMessage = "'var', 'function' or '}' expected"; + errorLevel = ERROR; + throw e; + } } void ClassBodyDeclaration() : @@ -580,57 +586,159 @@ void ClassBodyDeclaration() : } void FieldDeclaration() : -{} { - VariableDeclarator() ( VariableDeclarator() )* + PHPVarDeclaration variableDeclaration; +} +{ + variableDeclaration = VariableDeclarator() + {currentSegment.add(variableDeclaration);} + ( + variableDeclaration = VariableDeclarator() + {currentSegment.add(variableDeclaration);} + )* + try { + + } catch (ParseException e) { + errorMessage = "';' expected after variable declaration"; + errorLevel = ERROR; + throw e; + } } -void VariableDeclarator() : -{} +PHPVarDeclaration VariableDeclarator() : { - VariableDeclaratorId() [ VariableInitializer() ] + String varName; + String varValue = null; + int pos = jj_input_stream.bufpos; +} +{ + varName = VariableDeclaratorId() + [ + + try { + varValue = VariableInitializer() + } catch (ParseException e) { + errorMessage = "Literal expression expected in variable initializer"; + errorLevel = ERROR; + throw e; + } + ] + { + if (varValue == null) { + return new PHPVarDeclaration(currentSegment,varName,pos); + } + return new PHPVarDeclaration(currentSegment,varName,pos,varValue); + } } -void VariableDeclaratorId() : -{} +String VariableDeclaratorId() : { - Variable() ( LOOKAHEAD(2) VariableSuffix() )* + String expr; + StringBuffer buff = new StringBuffer(); +} +{ + try { + expr = Variable() + {buff.append(expr);} + ( LOOKAHEAD(2) expr = VariableSuffix() + {buff.append(expr);} + )* + {return buff.toString();} + } catch (ParseException e) { + errorMessage = "'$' expected for variable identifier"; + errorLevel = ERROR; + throw e; + } } -void Variable(): -{} +String Variable(): +{ + String expr = null; + Token token; +} { - ( Expression() ) * + token = [ expr = Expression() ] + { + if (expr == null) { + return token.image; + } + return token + "{" + expr + "}"; + } | - VariableName() + expr = VariableName() + {return "$" + expr;} } String VariableName(): -{} { - Expression() +String expr = null; +Token token; +} +{ + expr = Expression() + {return "{"+expr+"}";} +| + token = [ expr = Expression() ] + { + if (expr == null) { + return token.image; + } + return token + "{" + expr + "}"; + } | - ( Expression() ) * + expr = VariableName() + {return "$" + expr;} | - VariableName() + token = [expr = VariableName()] + { + if (expr == null) { + return token.image; + } + return token.image + expr; + } } -void VariableInitializer() : -{} +String VariableInitializer() : { - Expression() + String expr; +} +{ + expr = Literal() + {return expr;} +| + expr = ArrayDeclarator() + {return expr;} } -void ArrayVariable() : -{} +String ArrayVariable() : +{ +String expr; +StringBuffer buff = new StringBuffer(); +} { - Expression() ( Expression())* + expr = Expression() + {buff.append(expr);} + [ expr = Expression() + {buff.append("=>").append(expr);}] + {return buff.toString();} } -void ArrayInitializer() : -{} +String ArrayInitializer() : +{ +String expr = null; +StringBuffer buff = new StringBuffer("("); +} { - [ ArrayVariable() ( LOOKAHEAD(2) ArrayVariable() )* ] + [ expr = ArrayVariable() + {buff.append(expr);} + ( LOOKAHEAD(2) expr = ArrayVariable() + {buff.append(",").append(expr);} + )* ] + + { + buff.append(")"); + return buff.toString(); + } } void MethodDeclaration() : @@ -643,7 +751,7 @@ void MethodDeclaration() : currentSegment.add(functionDeclaration); currentSegment = functionDeclaration; } - ( Block() | ) + Block() { currentSegment = (PHPSegmentWithChildren) currentSegment.getParent(); } @@ -651,281 +759,655 @@ void MethodDeclaration() : PHPFunctionDeclaration MethodDeclarator() : { - Token bit_and = null; Token identifier; StringBuffer methodDeclaration = new StringBuffer(); String formalParameters; int pos = jj_input_stream.bufpos; } { - [ bit_and = ] - identifier = FormalParameters() + [ {methodDeclaration.append("&");} ] + identifier = + {methodDeclaration.append(identifier);} + formalParameters = FormalParameters() { - if (bit_and != null) { - methodDeclaration.append("&"); - } - methodDeclaration.append(identifier); + methodDeclaration.append(formalParameters); return new PHPFunctionDeclaration(currentSegment,methodDeclaration.toString(),pos); } } -void FormalParameters() : -{} +String FormalParameters() : { - [ FormalParameter() ( FormalParameter() )* ] + String expr; + final StringBuffer buff = new StringBuffer("("); +} +{ + try { + + } catch (ParseException e) { + errorMessage = "Formal parameter expected after function identifier"; + errorLevel = ERROR; + jj_consume_token(token.kind); + } + [ expr = FormalParameter() + {buff.append(expr);} + ( + expr = FormalParameter() + {buff.append(",").append(expr);} + )* + ] + try { + + } catch (ParseException e) { + errorMessage = "')' expected"; + errorLevel = ERROR; + throw e; + } + { + buff.append(")"); + return buff.toString(); + } } -void FormalParameter() : -{} +String FormalParameter() : { - [] VariableDeclarator() + PHPVarDeclaration variableDeclaration; + StringBuffer buff = new StringBuffer(); +} +{ + [ {buff.append("&");}] variableDeclaration = VariableDeclarator() + { + buff.append(variableDeclaration.toString()); + return buff.toString(); + } } -void Type() : +String Type() : {} { + {return "string";} | + {return "bool";} | + {return "boolean";} | + {return "real";} | + {return "double";} | + {return "float";} | + {return "int";} | + {return "integer";} } -void Expression() : -{} +String Expression() : { - PrintExpression() + String expr; + String assignOperator = null; + String expr2 = null; +} +{ + expr = PrintExpression() + {return expr;} | - ConditionalExpression() + expr = ConditionalExpression() [ - AssignmentOperator() Expression() + assignOperator = AssignmentOperator() + try { + expr2 = Expression() + } catch (ParseException e) { + errorMessage = "expression expected"; + errorLevel = ERROR; + throw generateParseException(); + } ] + { + if (expr2 == null) { + return expr; + } else { + return expr + assignOperator + expr2; + } + } } -void AssignmentOperator() : -{} -{ - | | | | | | | | | | | | +String AssignmentOperator() : +{} +{ + +{return "=";} +| +{return "*=";} +| +{return "/=";} +| +{return "%=";} +| +{return "+=";} +| +{return "-=";} +| +{return "<<=";} +| +{return ">>=";} +| +{return ">>>=";} +| +{return "&=";} +| +{return "|=";} +| +{return "|=";} +| +{return ".=";} +} + +String ConditionalExpression() : +{ + String expr; + String expr2 = null; + String expr3 = null; +} +{ + expr = ConditionalOrExpression() [ expr2 = Expression() expr3 = ConditionalExpression() ] +{ + if (expr3 == null) { + return expr; + } else { + return expr + "?" + expr2 + ":" + expr3; + } +} } -void ConditionalExpression() : -{} +String ConditionalOrExpression() : { - ConditionalOrExpression() [ Expression() ConditionalExpression() ] + String expr; + Token operator; + String expr2 = null; + StringBuffer buff = new StringBuffer(); } - -void ConditionalOrExpression() : -{} { - ConditionalAndExpression() ( ( | <_ORL>) ConditionalAndExpression() )* + expr = ConditionalAndExpression() + { + buff.append(expr); + } + ( + (operator = | operator = <_ORL>) expr2 = ConditionalAndExpression() + { + buff.append(operator.image); + buff.append(expr2); + } + )* + { + return buff.toString(); + } } -void ConditionalAndExpression() : -{} +String ConditionalAndExpression() : { - ConcatExpression() ( ( | <_ANDL>) ConcatExpression() )* + String expr; + Token operator; + String expr2 = null; + StringBuffer buff = new StringBuffer(); +} +{ + expr = ConcatExpression() + { + buff.append(expr); + } + ( + (operator = | operator = <_ANDL>) expr2 = ConcatExpression() + { + buff.append(operator.image); + buff.append(expr2); + } + )* + { + return buff.toString(); + } } -void ConcatExpression() : -{} +String ConcatExpression() : { - InclusiveOrExpression() ( InclusiveOrExpression() )* + String expr; + String expr2 = null; + StringBuffer buff = new StringBuffer(); +} +{ + expr = InclusiveOrExpression() + { + buff.append(expr); + } + ( + expr2 = InclusiveOrExpression() + { + buff.append("."); + buff.append(expr2); + } + )* + { + return buff.toString(); + } } -void InclusiveOrExpression() : -{} +String InclusiveOrExpression() : +{ + String expr; + String expr2 = null; + StringBuffer buff = new StringBuffer(); +} { - ExclusiveOrExpression() ( ExclusiveOrExpression() )* + expr = ExclusiveOrExpression() + { + buff.append(expr); + } + ( + expr2 = ExclusiveOrExpression() + { + buff.append("|"); + buff.append(expr2); + } + )* + { + return buff.toString(); + } } -void ExclusiveOrExpression() : -{} +String ExclusiveOrExpression() : { - AndExpression() ( AndExpression() )* + String expr; + String expr2 = null; + StringBuffer buff = new StringBuffer(); +} +{ + expr = AndExpression() + { + buff.append(expr); + } + ( + expr2 = AndExpression() + { + buff.append("^"); + buff.append(expr2); + } + )* + { + return buff.toString(); + } } -void AndExpression() : -{} +String AndExpression() : { - EqualityExpression() ( EqualityExpression() )* + String expr; + String expr2 = null; + StringBuffer buff = new StringBuffer(); +} +{ + expr = EqualityExpression() + { + buff.append(expr); + } + ( + expr2 = EqualityExpression() + { + buff.append("&"); + buff.append(expr2); + } + )* + { + return buff.toString(); + } } -void EqualityExpression() : -{} +String EqualityExpression() : +{ + String expr; + Token operator; + String expr2; + StringBuffer buff = new StringBuffer(); +} { - RelationalExpression() ( ( | ) RelationalExpression() )* + expr = RelationalExpression() + {buff.append(expr);} + ( + ( operator = | operator = ) expr2 = RelationalExpression() + { + buff.append(operator.image); + buff.append(expr2); + } + )* + {return buff.toString();} } -void RelationalExpression() : -{} +String RelationalExpression() : +{ + String expr; + Token operator; + String expr2; + StringBuffer buff = new StringBuffer(); +} { - ShiftExpression() ( ( | | | ) ShiftExpression() )* + expr = ShiftExpression() + {buff.append(expr);} + ( + ( operator = | operator = | operator = | operator = ) expr2 = ShiftExpression() + { + buff.append(operator.image); + buff.append(expr2); + } + )* + {return buff.toString();} } -void ShiftExpression() : -{} +String ShiftExpression() : +{ + String expr; + Token operator; + String expr2; + StringBuffer buff = new StringBuffer(); +} { - AdditiveExpression() ( ( | | ) AdditiveExpression() )* + expr = AdditiveExpression() + {buff.append(expr);} + ( + (operator = | operator = | operator = ) expr2 = AdditiveExpression() + { + buff.append(operator.image); + buff.append(expr2); + } + )* + {return buff.toString();} } -void AdditiveExpression() : -{} +String AdditiveExpression() : { - MultiplicativeExpression() ( ( | ) MultiplicativeExpression() )* + String expr; + Token operator; + String expr2; + StringBuffer buff = new StringBuffer(); +} +{ + expr = MultiplicativeExpression() + {buff.append(expr);} + ( + ( operator = | operator = ) expr2 = MultiplicativeExpression() + { + buff.append(operator.image); + buff.append(expr2); + } + )* + {return buff.toString();} } -void MultiplicativeExpression() : -{} +String MultiplicativeExpression() : +{ + String expr, expr2; + Token operator; + final StringBuffer buff = new StringBuffer();} { - UnaryExpression() ( ( | | ) UnaryExpression() )* + expr = UnaryExpression() + {buff.append(expr);} + ( + ( operator = | operator = | operator = ) expr2 = UnaryExpression() + { + buff.append(operator.image); + buff.append(expr2); + } + )* + {return buff.toString();} } -void UnaryExpression() : -{} +String UnaryExpression() : { - UnaryExpression() + String expr; + Token token; +} +{ + expr = UnaryExpression() + {return "@" + expr;} | - ( | ) UnaryExpression() + ( token = | token = ) expr = UnaryExpression() + { + return token.image + expr; + } | - PreIncrementExpression() + expr = PreIncrementExpression() + {return expr;} | - PreDecrementExpression() + expr = PreDecrementExpression() + {return expr;} | - UnaryExpressionNotPlusMinus() + expr = UnaryExpressionNotPlusMinus() + {return expr;} } -void PreIncrementExpression() : -{} +String PreIncrementExpression() : +{ +String expr; +} { - PrimaryExpression() + expr = PrimaryExpression() + {return "++"+expr;} } -void PreDecrementExpression() : -{} +String PreDecrementExpression() : +{ +String expr; +} { - PrimaryExpression() + expr = PrimaryExpression() + {return "--"+expr;} } -void UnaryExpressionNotPlusMinus() : -{} +String UnaryExpressionNotPlusMinus() : { - UnaryExpression() + String expr; +} +{ + expr = UnaryExpression() + {return "!" + expr;} | LOOKAHEAD( Type() ) - CastExpression() + expr = CastExpression() + {return expr;} | - PostfixExpression() + expr = PostfixExpression() + {return expr;} | - Literal() + expr = Literal() + {return expr;} | - Expression() + expr = Expression() + {return "("+expr+")";} } -void CastExpression() : -{} +String CastExpression() : { - Type() UnaryExpression() +String type; +String expr; +} +{ + type = Type() expr = UnaryExpression() + {return "(" + type + ")" + expr;} } -void PostfixExpression() : -{} +String PostfixExpression() : { - PrimaryExpression() [ | ] + String expr; + Token operator = null; +} +{ + expr = PrimaryExpression() [ operator = | operator = ] + { + if (operator == null) { + return expr; + } + return expr + operator.image; + } } -void PrimaryExpression() : -{} +String PrimaryExpression() : +{ + Token identifier; + String expr; + final StringBuffer buff = new StringBuffer(); +} { LOOKAHEAD(2) - ClassIdentifier() (PrimarySuffix())* + identifier = expr = ClassIdentifier() + {buff.append(identifier.image).append("::").append(expr);} + ( + expr = PrimarySuffix() + {buff.append(expr);} + )* + {return buff.toString();} | - PrimaryPrefix() ( PrimarySuffix() )* + expr = PrimaryPrefix() {buff.append(expr);} + ( expr = PrimarySuffix() {buff.append(expr);} )* + {return buff.toString();} | - ArrayInitializer() + expr = ArrayDeclarator() + {return "array" + expr;} } -void PrimaryPrefix() : -{} +String ArrayDeclarator() : +{ + String expr; +} +{ + expr = ArrayInitializer() + {return "array" + expr;} +} + +String PrimaryPrefix() : { - + String expr; + Token token = null; +} +{ + token = + {return token.image;} | - [] ClassIdentifier() + [token = ] expr = ClassIdentifier() + { + if (token == null) { + return "new " + expr; + } + return "new &" + expr; + } | - VariableDeclaratorId() + expr = VariableDeclaratorId() + {return expr;} } -void ClassIdentifier(): -{} +String ClassIdentifier(): { - + String expr; + Token token; +} +{ + token = + {return token.image;} | - VariableDeclaratorId() + expr = VariableDeclaratorId() + {return expr;} } -void PrimarySuffix() : -{} +String PrimarySuffix() : { - Arguments() + String expr; +} +{ + expr = Arguments() + {return expr;} | - VariableSuffix() + expr = VariableSuffix() + {return expr;} } -void VariableSuffix() : -{} +String VariableSuffix() : +{ + String expr = null; +} { - VariableName() + expr = VariableName() + {return "->" + expr;} | - [ Expression() ] + [ expr = Expression() ] + try { + + } catch (ParseException e) { + errorMessage = "']' expected"; + errorLevel = ERROR; + throw generateParseException(); + } + { + if(expr == null) { + return "[]"; + } + return "[" + expr + "]"; + } } -void Literal() : -{} +String Literal() : { - + String expr; + Token token; +} +{ + token = + {return token.image;} | - + token = + {return token.image;} | try { - + token = + {return token.image;} } catch (TokenMgrError e) { errorMessage = "unterminated string"; errorLevel = ERROR; throw generateParseException(); } | - BooleanLiteral() + expr = BooleanLiteral() + {return expr;} | - NullLiteral() + expr = NullLiteral() + {return expr;} } -void BooleanLiteral() : +String BooleanLiteral() : {} { + {return "true";} | + {return "false";} } -void NullLiteral() : +String NullLiteral() : {} { + {return "null";} } -void Arguments() : -{} +String Arguments() : +{ +String expr = null; +} { - [ ArgumentList() ] + [ expr = ArgumentList() ] try { } catch (ParseException e) { @@ -933,21 +1415,35 @@ void Arguments() : errorLevel = ERROR; throw e; } + { + if (expr == null) { + return "()"; + } + return "(" + expr + ")"; + } } -void ArgumentList() : -{} +String ArgumentList() : { - Expression() +String expr; +StringBuffer buff = new StringBuffer(); +} +{ + expr = Expression() + {buff.append(expr);} ( try { - Expression() + expr = Expression() } catch (ParseException e) { errorMessage = "expression expected after a comma in argument list"; errorLevel = ERROR; throw e; } + { + buff.append(",").append("expr"); + } )* + {return buff.toString();} } /* @@ -958,7 +1454,14 @@ void Statement() : {} { LOOKAHEAD(2) - Expression() ( | "?>") + Expression() + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } | LOOKAHEAD(2) LabeledStatement() @@ -994,7 +1497,7 @@ void Statement() : | EchoStatement() | - IncludeStatement() + [] IncludeStatement() | StaticStatement() | @@ -1002,21 +1505,67 @@ void Statement() : } void IncludeStatement() : -{} { - Expression() ( | "?>") + String expr; + int pos = jj_input_stream.bufpos; +} +{ + + expr = Expression() + {currentSegment.add(new PHPReqIncDeclaration(currentSegment, "require",pos,expr));} + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } | - Expression() ( | "?>") + + expr = Expression() + {currentSegment.add(new PHPReqIncDeclaration(currentSegment, "require_once",pos,expr));} + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } | - Expression() ( | "?>") + + expr = Expression() + {currentSegment.add(new PHPReqIncDeclaration(currentSegment, "include",pos,expr));} + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } | - Expression() ( | "?>") + + expr = Expression() + {currentSegment.add(new PHPReqIncDeclaration(currentSegment, "include_once",pos,expr));} + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } } -void PrintExpression() : -{} +String PrintExpression() : { - Expression() + StringBuffer buff = new StringBuffer("print "); + String expr; +} +{ + expr = Expression() + { + buff.append(expr); + return buff.toString(); + } } void EchoStatement() : @@ -1035,13 +1584,27 @@ void EchoStatement() : void GlobalStatement() : {} { - VariableDeclaratorId() ( VariableDeclaratorId())* ( | "?>") + VariableDeclaratorId() ( VariableDeclaratorId())* + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } } void StaticStatement() : {} { - VariableDeclarator() ( VariableDeclarator())* ( | "?>") + VariableDeclarator() ( VariableDeclarator())* + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } } void LabeledStatement() : @@ -1053,7 +1616,15 @@ void LabeledStatement() : void Block() : {} { - ( BlockStatement() )* + try { + + } catch (ParseException e) { + errorMessage = "'{' expected"; + errorLevel = ERROR; + throw e; + } + ( BlockStatement() )* + } void BlockStatement() : @@ -1079,11 +1650,6 @@ void EmptyStatement() : } void StatementExpression() : -/* - * The last expansion of this production accepts more than the legal - * Java expansions for StatementExpression. This expansion does not - * use PostfixExpression for performance reasons. - */ {} { PreIncrementExpression() @@ -1162,7 +1728,14 @@ void WhileStatement() : void WhileStatement0() : {} { - (Statement())* ( | "?>") + (Statement())* + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } | Statement() } @@ -1170,7 +1743,14 @@ void WhileStatement0() : void DoStatement() : {} { - Statement() Condition("while") ( | "?>") + Statement() Condition("while") + try { + ( | "?>") + } catch (ParseException e) { + errorMessage = "';' expected"; + errorLevel = ERROR; + throw e; + } } void ForStatement() :