*/
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);
}
"/*" : IN_MULTI_LINE_COMMENT
}
-<IN_SINGLE_LINE_COMMENT>
-SPECIAL_TOKEN :
+<IN_SINGLE_LINE_COMMENT> SPECIAL_TOKEN :
+{
+ <SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n" > : PHPPARSING
+}
+
+<IN_SINGLE_LINE_COMMENT> TOKEN :
{
- <SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n" | "?>" > : PHPPARSING
+ <SINGLE_LINE_COMMENT_PHPEND : "?>" > : DEFAULT
}
<IN_FORMAL_COMMENT>
| < TRUE: "true" >
| < WHILE: "while" >
| < ENDWHILE : "endwhile" >
+| <FOREACH : "foreach" >
+| <AS : "as" >
}
/* TYPES */
>
|
< #SPECIAL:
- "_"
+ "_" | ["\u007f"-"\u00ff"]
>
}
| <REMASSIGN: "%=" >
| <LSHIFTASSIGN: "<<=" >
| <RSIGNEDSHIFTASSIGN: ">>=" >
-| <RUNSIGNEDSHIFTASSIGN: ">>>=" >
+| <BANGDOUBLEEQUAL: "!==" >
+| <TRIPLEEQUAL: "===" >
+| <TILDEEQUAL: "~=" >
}
<PHPPARSING> TOKEN :
void phpFile() :
{}
{
+ try {
(<PHPSTART> Php() <PHPEND>)*
<EOF>
+ } catch (TokenMgrError e) {
+ errorMessage = e.getMessage();
+ errorLevel = ERROR;
+ throw generateParseException();
+ }
}
void Php() :
String VariableInitializer() :
{
String expr;
+ Token token;
}
{
expr = Literal()
{return expr;}
|
+ <MINUS> (token = <INTEGER_LITERAL> | token = <FLOATING_POINT_LITERAL>)
+ {return "-" + token.image;}
+|
+ <PLUS> (token = <INTEGER_LITERAL> | token = <FLOATING_POINT_LITERAL>)
+ {return "+" + token.image;}
+|
expr = ArrayDeclarator()
{return expr;}
+|
+ token = <IDENTIFIER>
+ {return token.image;}
}
String ArrayVariable() :
|
<INTEGER>
{return "integer";}
+|
+ <OBJECT>
+ {return "object";}
}
String Expression() :
} catch (ParseException e) {
errorMessage = "expression expected";
errorLevel = ERROR;
- throw generateParseException();
+ throw e;
}
]
{
{return "<<=";}
| <RSIGNEDSHIFTASSIGN>
{return ">>=";}
-| <RUNSIGNEDSHIFTASSIGN>
-{return ">>>=";}
| <ANDASSIGN>
{return "&=";}
| <XORASSIGN>
{return "|=";}
| <DOTASSIGN>
{return ".=";}
+| <TILDEEQUAL>
+{return "~=";}
}
String ConditionalExpression() :
expr = RelationalExpression()
{buff.append(expr);}
(
- ( operator = <EQ> | operator = <NE> ) expr2 = RelationalExpression()
+ ( operator = <EQ>
+ | operator = <NE>
+ | operator = <BANGDOUBLEEQUAL>
+ | operator = <TRIPLEEQUAL>
+ )
+ expr2 = RelationalExpression()
{
buff.append(operator.image);
buff.append(expr2);
{return buff.toString();}
}
+/**
+ * An unary expression starting with @, & or nothing
+ */
String UnaryExpression() :
{
String expr;
Token token;
+ final StringBuffer buff = new StringBuffer();
}
{
- <AT> expr = UnaryExpression()
- {return "@" + expr;}
+ token = <BIT_AND> expr = UnaryExpressionNoPrefix()
+ {
+ if (token == null) {
+ return expr;
+ }
+ return token.image + expr;
+ }
|
+ (<AT> {buff.append("@");})* expr = UnaryExpressionNoPrefix()
+ {return buff.append(expr).toString();}
+}
+
+String UnaryExpressionNoPrefix() :
+{
+ String expr;
+ Token token;
+}
+{
( token = <PLUS> | token = <MINUS> ) expr = UnaryExpression()
{
return token.image + expr;
{return expr;}
}
+
String PreIncrementExpression() :
{
String expr;
token = <IDENTIFIER>
{return token.image;}
|
- [token = <BIT_AND>] <NEW> expr = ClassIdentifier()
+ <NEW> expr = ClassIdentifier()
{
- if (token == null) {
- return "new " + expr;
- }
- return "new &" + expr;
+ return "new " + expr;
}
|
expr = VariableDeclaratorId()
} catch (ParseException e) {
errorMessage = "']' expected";
errorLevel = ERROR;
- throw generateParseException();
+ throw e;
}
{
if(expr == null) {
token = <FLOATING_POINT_LITERAL>
{return token.image;}
|
- try {
- token = <STRING_LITERAL>
+ token = <STRING_LITERAL>
{return token.image;}
- } catch (TokenMgrError e) {
- errorMessage = "unterminated string";
- errorLevel = ERROR;
- throw generateParseException();
- }
|
expr = BooleanLiteral()
{return expr;}
|
ForStatement()
|
+ ForeachStatement()
+|
BreakStatement()
|
ContinueStatement()
}
}
+void ForeachStatement() :
+{}
+{
+ <FOREACH> <LPAREN> Variable() <AS> Variable() [ <ARRAYASSIGN> Expression() ] <RPAREN> Statement()
+}
+
void ForStatement() :
{}
{