}
public void parse(String s) throws CoreException {
- ReInit(new StringReader(s));
+ StringReader stream = new StringReader(s);
+ if (jj_input_stream == null) {
+ jj_input_stream = new SimpleCharStream(stream, 1, 1);
+ }
+ ReInit(stream);
try {
parse();
} catch (ParseException e) {
"/*" : 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" >
+| <ENDIF : "endif" >
+| <ENDFOR : "endfor" >
+| <FOREACH : "foreach" >
+| <AS : "as" >
}
/* TYPES */
| <LE: "<=" >
| <GE: ">=" >
| <NE: "!=" >
+| <DIF: "<>" >
| <SC_OR: "||" >
| <SC_AND: "&&" >
| <INCR: "++" >
{
<CLASS> className = <IDENTIFIER> [ <EXTENDS> <IDENTIFIER> ]
{
- classDeclaration = new PHPClassDeclaration(currentSegment,className.image,pos);
- currentSegment.add(classDeclaration);
- currentSegment = classDeclaration;
+ if (currentSegment != null) {
+ classDeclaration = new PHPClassDeclaration(currentSegment,className.image,pos);
+ currentSegment.add(classDeclaration);
+ currentSegment = classDeclaration;
+ }
}
ClassBody()
{
- currentSegment = (PHPSegmentWithChildren) currentSegment.getParent();
+ if (currentSegment != null) {
+ currentSegment = (PHPSegmentWithChildren) currentSegment.getParent();
+ }
}
}
}
{
<VAR> variableDeclaration = VariableDeclarator()
- {currentSegment.add(variableDeclaration);}
+ {
+ if (currentSegment != null) {
+ currentSegment.add(variableDeclaration);
+ }
+ }
( <COMMA>
- variableDeclaration = VariableDeclarator()
- {currentSegment.add(variableDeclaration);}
+ variableDeclaration = VariableDeclarator()
+ {
+ if (currentSegment != null) {
+ currentSegment.add(variableDeclaration);
+ }
+ }
)*
try {
<SEMICOLON>
{
<FUNCTION> functionDeclaration = MethodDeclarator()
{
- currentSegment.add(functionDeclaration);
- currentSegment = functionDeclaration;
+ if (currentSegment != null) {
+ currentSegment.add(functionDeclaration);
+ currentSegment = functionDeclaration;
+ }
}
Block()
{
- currentSegment = (PHPSegmentWithChildren) currentSegment.getParent();
+ if (currentSegment != null) {
+ currentSegment = (PHPSegmentWithChildren) currentSegment.getParent();
+ }
}
}
|
<INTEGER>
{return "integer";}
+|
+ <OBJECT>
+ {return "object";}
}
String Expression() :
{buff.append(expr);}
(
( operator = <EQ>
+ | operator = <DIF>
| operator = <NE>
| operator = <BANGDOUBLEEQUAL>
| operator = <TRIPLEEQUAL>
|
ForStatement()
|
+ ForeachStatement()
+|
BreakStatement()
|
ContinueStatement()
{
<REQUIRE>
expr = Expression()
- {currentSegment.add(new PHPReqIncDeclaration(currentSegment, "require",pos,expr));}
+ {
+ if (currentSegment != null) {
+ currentSegment.add(new PHPReqIncDeclaration(currentSegment, "require",pos,expr));
+ }
+ }
try {
(<SEMICOLON> | "?>")
} catch (ParseException e) {
|
<REQUIRE_ONCE>
expr = Expression()
- {currentSegment.add(new PHPReqIncDeclaration(currentSegment, "require_once",pos,expr));}
+ {
+ if (currentSegment != null) {
+ currentSegment.add(new PHPReqIncDeclaration(currentSegment, "require_once",pos,expr));
+ }
+ }
try {
(<SEMICOLON> | "?>")
} catch (ParseException e) {
|
<INCLUDE>
expr = Expression()
- {currentSegment.add(new PHPReqIncDeclaration(currentSegment, "include",pos,expr));}
+ {
+ if (currentSegment != null) {
+ currentSegment.add(new PHPReqIncDeclaration(currentSegment, "include",pos,expr));
+ }
+ }
try {
(<SEMICOLON> | "?>")
} catch (ParseException e) {
|
<INCLUDE_ONCE>
expr = Expression()
- {currentSegment.add(new PHPReqIncDeclaration(currentSegment, "include_once",pos,expr));}
+ {
+ if (currentSegment != null) {
+ currentSegment.add(new PHPReqIncDeclaration(currentSegment, "include_once",pos,expr));
+ }
+ }
try {
(<SEMICOLON> | "?>")
} catch (ParseException e) {
*/
{}
{
- <IF> Condition("if") Statement() ( LOOKAHEAD(1) ElseIfStatement() )* [ LOOKAHEAD(1) <ELSE> Statement() ]
+ <IF> Condition("if") IfStatement0()
}
void Condition(String keyword) :
}
}
+void IfStatement0() :
+{}
+{
+ <COLON> (Statement())* (ElseIfStatementColon())* [ElseStatementColon()] <ENDIF>
+ try {
+ <SEMICOLON>
+ } catch (ParseException e) {
+ errorMessage = "';' expected 'endif' keyword";
+ errorLevel = ERROR;
+ throw e;
+ }
+|
+ Statement() ( LOOKAHEAD(1) ElseIfStatement() )* [ LOOKAHEAD(1) <ELSE> Statement() ]
+}
+
+void ElseIfStatementColon() :
+{}
+{
+ <ELSEIF> Condition("elseif") <COLON> (Statement())*
+}
+
+void ElseStatement() :
+{}
+{
+ <ELSE> Statement()
+}
+
+void ElseStatementColon() :
+{}
+{
+ <ELSE> <COLON> (Statement())*
+}
+
void ElseIfStatement() :
{}
{
try {
(<SEMICOLON> | "?>")
} catch (ParseException e) {
- errorMessage = "';' expected";
+ errorMessage = "';' expected after 'endwhile' keyword";
errorLevel = ERROR;
throw e;
}
}
}
+void ForeachStatement() :
+{}
+{
+ <FOREACH> <LPAREN> Variable() <AS> Variable() [ <ARRAYASSIGN> Expression() ] <RPAREN> Statement()
+}
+
void ForStatement() :
{}
{
- <FOR> <LPAREN> [ ForInit() ] <SEMICOLON> [ Expression() ] <SEMICOLON> [ ForUpdate() ] <RPAREN> Statement()
+ <FOR> <LPAREN> [ ForInit() ] <SEMICOLON> [ Expression() ] <SEMICOLON> [ ForUpdate() ] <RPAREN>
+ (
+ Statement()
+ |
+ <COLON> (Statement())* <ENDFOR>
+ try {
+ <SEMICOLON>
+ } catch (ParseException e) {
+ errorMessage = "';' expected 'endfor' keyword";
+ errorLevel = ERROR;
+ throw e;
+ }
+ )
}
void ForInit() :