X-Git-Url: http://git.phpeclipse.com
diff --git a/net.sourceforge.phpeclipse/src/test/PHPParser.java b/net.sourceforge.phpeclipse/src/test/PHPParser.java
index 773f40e..bc7c112 100644
--- a/net.sourceforge.phpeclipse/src/test/PHPParser.java
+++ b/net.sourceforge.phpeclipse/src/test/PHPParser.java
@@ -8,45 +8,60 @@ import org.eclipse.ui.texteditor.MarkerUtilities;
import org.eclipse.jface.preference.IPreferenceStore;
import java.util.Hashtable;
+import java.util.Enumeration;
import java.io.StringReader;
+import java.io.*;
import java.text.MessageFormat;
import net.sourceforge.phpeclipse.actions.PHPStartApacheAction;
import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-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;
+import net.sourceforge.phpdt.internal.compiler.parser.*;
+import net.sourceforge.phpdt.internal.compiler.ast.*;
/**
* A new php parser.
- * This php parser is inspired by the Java 1.2 grammar example
+ * This php parser is inspired by the Java 1.2 grammar example
* given with JavaCC. You can get JavaCC at http://www.webgain.com
* You can test the parser with the PHPParserTestCase2.java
* @author Matthieu Casanova
*/
public final class PHPParser extends PHPParserSuperclass implements PHPParserConstants {
+ /** The file that is parsed. */
private static IFile fileToParse;
- /** The current segment */
+ /** The current segment. */
private static PHPSegmentWithChildren currentSegment;
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;
+ static PHPOutlineInfo outlineInfo;
+
+ private static PHPFunctionDeclaration currentFunction;
+ private static boolean assigning;
+
+ /** 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;
- public PHPParser() {
- }
+ private static int errorStart = -1;
+ private static int errorEnd = -1;
+
+ //ast stack
+ private final static int AstStackIncrement = 100;
+ /** The stack of node. */
+ private static AstNode[] astStack;
+ /** The cursor in expression stack. */
+ private static int expressionPtr;
public final void setFileToParse(final IFile fileToParse) {
this.fileToParse = fileToParse;
}
+ public PHPParser() {
+ }
+
public PHPParser(final IFile fileToParse) {
this(new StringReader(""));
this.fileToParse = fileToParse;
@@ -59,15 +74,31 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
jj_input_stream = new SimpleCharStream(stream, 1, 1);
}
ReInit(new StringReader(strEval));
+ astStack = new AstNode[AstStackIncrement];
phpTest();
}
+ public static final void htmlParserTester(final File fileName) throws CoreException, ParseException {
+ try {
+ final Reader stream = new FileReader(fileName);
+ if (jj_input_stream == null) {
+ jj_input_stream = new SimpleCharStream(stream, 1, 1);
+ }
+ ReInit(stream);
+ astStack = new AstNode[AstStackIncrement];
+ phpFile();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace(); //To change body of catch statement use Options | File Templates.
+ }
+ }
+
public static final void htmlParserTester(final String strEval) throws CoreException, ParseException {
final StringReader stream = new StringReader(strEval);
if (jj_input_stream == null) {
jj_input_stream = new SimpleCharStream(stream, 1, 1);
}
ReInit(stream);
+ astStack = new AstNode[AstStackIncrement];
phpFile();
}
@@ -79,6 +110,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
jj_input_stream = new SimpleCharStream(stream, 1, 1);
}
ReInit(stream);
+ astStack = new AstNode[AstStackIncrement];
try {
parse();
} catch (ParseException e) {
@@ -96,6 +128,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
if (errorMessage == null) {
PHPeclipsePlugin.log(e);
errorMessage = "this exception wasn't handled by the parser please tell us how to reproduce it";
+ errorStart = jj_input_stream.getPosition();
+ errorEnd = errorStart + 1;
}
setMarker(e);
errorMessage = null;
@@ -107,12 +141,23 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
*/
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);
}
@@ -190,6 +235,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
jj_input_stream = new SimpleCharStream(stream, 1, 1);
}
ReInit(stream);
+ astStack = new AstNode[AstStackIncrement];
try {
parse();
} catch (ParseException e) {
@@ -219,7 +265,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
}
}
- public static final void parse() throws ParseException {
+ private static final void parse() throws ParseException {
phpFile();
}
@@ -242,6 +288,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
case IF:
case ARRAY:
case BREAK:
+ case LIST:
case PRINT:
case ECHO:
case INCLUDE:
@@ -250,7 +297,6 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
case REQUIRE_ONCE:
case GLOBAL:
case STATIC:
- case LIST:
case CONTINUE:
case DO:
case FOR:
@@ -288,27 +334,25 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
}
jj_consume_token(0);
} catch (TokenMgrError e) {
+ PHPeclipsePlugin.log(e);
+ errorStart = SimpleCharStream.getPosition();
+ errorEnd = errorStart + 1;
errorMessage = e.getMessage();
errorLevel = ERROR;
{if (true) throw generateParseException();}
}
}
+/**
+ * A php block is a = expression [;]?>
+ * or
+ * or somephpcode ?>
+ */
static final public void PhpBlock() throws ParseException {
- final int start = jj_input_stream.bufpos;
+ final int start = jj_input_stream.getPosition();
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case PHPECHOSTART:
- jj_consume_token(PHPECHOSTART);
- Expression();
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case SEMICOLON:
- jj_consume_token(SEMICOLON);
- break;
- default:
- jj_la1[1] = jj_gen;
- ;
- }
- jj_consume_token(PHPEND);
+ phpEchoBlock();
break;
case PHPSTARTSHORT:
case PHPSTARTLONG:
@@ -318,6 +362,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
case IF:
case ARRAY:
case BREAK:
+ case LIST:
case PRINT:
case ECHO:
case INCLUDE:
@@ -326,7 +371,6 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
case REQUIRE_ONCE:
case GLOBAL:
case STATIC:
- case LIST:
case CONTINUE:
case DO:
case FOR:
@@ -367,7 +411,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
setMarker(fileToParse,
"You should use '' expected";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
break;
default:
- jj_la1[4] = jj_gen;
+ jj_la1[3] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
+ static final public void phpEchoBlock() throws ParseException {
+ jj_consume_token(PHPECHOSTART);
+ Expression();
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case SEMICOLON:
+ jj_consume_token(SEMICOLON);
+ break;
+ default:
+ jj_la1[4] = jj_gen;
+ ;
+ }
+ jj_consume_token(PHPEND);
+ }
+
static final public void Php() throws ParseException {
label_2:
while (true) {
@@ -409,6 +469,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
case IF:
case ARRAY:
case BREAK:
+ case LIST:
case PRINT:
case ECHO:
case INCLUDE:
@@ -417,7 +478,6 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
case REQUIRE_ONCE:
case GLOBAL:
case STATIC:
- case LIST:
case CONTINUE:
case DO:
case FOR:
@@ -458,13 +518,30 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
static final public void ClassDeclaration() throws ParseException {
final PHPClassDeclaration classDeclaration;
final Token className;
- final int pos = jj_input_stream.bufpos;
+ final int pos;
jj_consume_token(CLASS);
- className = jj_consume_token(IDENTIFIER);
+ try {
+ pos = jj_input_stream.getPosition();
+ className = jj_consume_token(IDENTIFIER);
+ } catch (ParseException e) {
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected";
+ errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
+ {if (true) throw e;}
+ }
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case EXTENDS:
jj_consume_token(EXTENDS);
- jj_consume_token(IDENTIFIER);
+ try {
+ jj_consume_token(IDENTIFIER);
+ } catch (ParseException e) {
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', identifier expected";
+ errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
+ {if (true) throw e;}
+ }
break;
default:
jj_la1[6] = jj_gen;
@@ -485,8 +562,10 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
try {
jj_consume_token(LBRACE);
} catch (ParseException e) {
- errorMessage = "'{' expected";
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image + "', '{' expected";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
label_3:
@@ -505,12 +584,17 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
try {
jj_consume_token(RBRACE);
} catch (ParseException e) {
- errorMessage = "'var', 'function' or '}' expected";
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', 'var', 'function' or '}' expected";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
}
+/**
+ * A class can contain only methods and fields.
+ */
static final public void ClassBodyDeclaration() throws ParseException {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case FUNCTION:
@@ -526,10 +610,14 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
}
}
+/**
+ * A class field declaration : it's var VariableDeclarator() (, VariableDeclarator())*;.
+ */
static final public void FieldDeclaration() throws ParseException {
PHPVarDeclaration variableDeclaration;
jj_consume_token(VAR);
variableDeclaration = VariableDeclarator();
+ outlineInfo.addVariable(variableDeclaration.getVariable().getName());
if (currentSegment != null) {
currentSegment.add(variableDeclaration);
}
@@ -552,16 +640,17 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
try {
jj_consume_token(SEMICOLON);
} catch (ParseException e) {
- errorMessage = "';' expected after variable declaration";
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected after variable declaration";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
}
static final public PHPVarDeclaration VariableDeclarator() throws ParseException {
- final String varName;
- String varValue;
- final int pos = jj_input_stream.bufpos;
+ final String varName, varValue;
+ final int pos = jj_input_stream.getPosition();
varName = VariableDeclaratorId();
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ASSIGN:
@@ -572,6 +661,8 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
} catch (ParseException e) {
errorMessage = "Literal expression expected in variable initializer";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
break;
@@ -588,7 +679,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
final StringBuffer buff = new StringBuffer();
try {
expr = Variable();
- buff.append(expr);
+ buff.append(expr);
label_5:
while (true) {
if (jj_2_1(2)) {
@@ -597,12 +688,14 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
break label_5;
}
expr = VariableSuffix();
- buff.append(expr);
+ buff.append(expr);
}
{if (true) return buff.toString();}
} catch (ParseException e) {
errorMessage = "'$' expected for variable identifier";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
throw new Error("Missing return statement in function");
@@ -624,15 +717,21 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon
jj_la1[11] = jj_gen;
;
}
- if (expr == null) {
- {if (true) return token.image;}
+ if (expr == null && !assigning) {
+ if (currentFunction != null) {
+ PHPVarDeclaration var = currentFunction.getParameter(token.image.substring(1));
+ if (var != null) {
+ var.getVariable().setUsed(true);
+ }
+ }
+ {if (true) return token.image.substring(1);}
}
{if (true) return token + "{" + expr + "}";}
break;
case DOLLAR:
jj_consume_token(DOLLAR);
expr = VariableName();
- {if (true) return "$" + expr;}
+ {if (true) return expr;}
break;
default:
jj_la1[12] = jj_gen;
@@ -665,6 +764,12 @@ final Token token;
;
}
if (expr == null) {
+ if (currentFunction != null) {
+ PHPVarDeclaration var = currentFunction.getParameter(token.image);
+ if (var != null) {
+ var.getVariable().setUsed(true);
+ }
+ }
{if (true) return token.image;}
}
{if (true) return token + "{" + expr + "}";}
@@ -672,28 +777,26 @@ final Token token;
case DOLLAR:
jj_consume_token(DOLLAR);
expr = VariableName();
- {if (true) return "$" + expr;}
+ if (currentFunction != null) {
+ PHPVarDeclaration var = currentFunction.getParameter(expr);
+ if (var != null) {
+ var.getVariable().setUsed(true);
+ }
+ }
+ {if (true) return "$" + expr;}
break;
case DOLLAR_ID:
token = jj_consume_token(DOLLAR_ID);
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case IDENTIFIER:
- case LBRACE:
- case DOLLAR:
- case DOLLAR_ID:
- expr = VariableName();
- break;
- default:
- jj_la1[14] = jj_gen;
- ;
+ if (currentFunction != null) {
+ PHPVarDeclaration var = currentFunction.getParameter(token.image.substring(1));
+ if (var != null) {
+ var.getVariable().setUsed(true);
}
- if (expr == null) {
- {if (true) return token.image;}
- }
- {if (true) return token.image + expr;}
+ }
+ {if (true) return token.image + expr;}
break;
default:
- jj_la1[15] = jj_gen;
+ jj_la1[14] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -723,7 +826,7 @@ final Token token;
token = jj_consume_token(FLOATING_POINT_LITERAL);
break;
default:
- jj_la1[16] = jj_gen;
+ jj_la1[15] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -739,7 +842,7 @@ final Token token;
token = jj_consume_token(FLOATING_POINT_LITERAL);
break;
default:
- jj_la1[17] = jj_gen;
+ jj_la1[16] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -754,7 +857,7 @@ final Token token;
{if (true) return token.image;}
break;
default:
- jj_la1[18] = jj_gen;
+ jj_la1[17] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -773,7 +876,7 @@ final StringBuffer buff = new StringBuffer();
buff.append("=>").append(expr);
break;
default:
- jj_la1[19] = jj_gen;
+ jj_la1[18] = jj_gen;
;
}
{if (true) return buff.toString();}
@@ -786,8 +889,8 @@ final StringBuffer buff = new StringBuffer("(");
jj_consume_token(LPAREN);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ARRAY:
- case PRINT:
case LIST:
+ case PRINT:
case NEW:
case NULL:
case TRUE:
@@ -821,6 +924,15 @@ final StringBuffer buff = new StringBuffer("(");
}
break;
default:
+ jj_la1[19] = jj_gen;
+ ;
+ }
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case COMMA:
+ jj_consume_token(COMMA);
+ buff.append(",");
+ break;
+ default:
jj_la1[20] = jj_gen;
;
}
@@ -830,25 +942,65 @@ final StringBuffer buff = new StringBuffer("(");
throw new Error("Missing return statement in function");
}
+/**
+ * A Method Declaration.
+ * function MetodDeclarator() Block()
+ */
static final public void MethodDeclaration() throws ParseException {
final PHPFunctionDeclaration functionDeclaration;
- jj_consume_token(FUNCTION);
- functionDeclaration = MethodDeclarator();
+ Token functionToken;
+ functionToken = jj_consume_token(FUNCTION);
+ try {
+ functionDeclaration = MethodDeclarator();
+ outlineInfo.addVariable(functionDeclaration.getName());
+ } catch (ParseException e) {
+ if (errorMessage != null) {
+ {if (true) throw e;}
+ }
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function identifier expected";
+ errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
+ {if (true) throw e;}
+ }
if (currentSegment != null) {
currentSegment.add(functionDeclaration);
currentSegment = functionDeclaration;
}
+ currentFunction = functionDeclaration;
Block();
+ Hashtable parameters = currentFunction.getParameters();
+ Enumeration vars = parameters.elements();
+ while (vars.hasMoreElements()) {
+ PHPVarDeclaration o = (PHPVarDeclaration) vars.nextElement();
+ if (!o.getVariable().isUsed()) {
+ try {
+ setMarker(fileToParse,
+ "Parameter "+o.getVariable().getName()+" is never used in function",
+ functionToken.beginLine,
+ WARNING,
+ "Line " + token.beginLine);
+ } catch (CoreException e) {
+ PHPeclipsePlugin.log(e);
+ }
+ }
+ }
+ currentFunction = null;
if (currentSegment != null) {
currentSegment = (PHPSegmentWithChildren) currentSegment.getParent();
}
}
+/**
+ * A MethodDeclarator.
+ * [&] IDENTIFIER(parameters ...).
+ * @return a function description for the outline
+ */
static final public PHPFunctionDeclaration MethodDeclarator() throws ParseException {
final Token identifier;
final StringBuffer methodDeclaration = new StringBuffer();
- final String formalParameters;
- final int pos = jj_input_stream.bufpos;
+ final Hashtable formalParameters;
+ final int pos = jj_input_stream.getPosition();
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case BIT_AND:
jj_consume_token(BIT_AND);
@@ -859,29 +1011,36 @@ final StringBuffer buff = new StringBuffer("(");
;
}
identifier = jj_consume_token(IDENTIFIER);
- methodDeclaration.append(identifier);
formalParameters = FormalParameters();
- methodDeclaration.append(formalParameters);
- {if (true) return new PHPFunctionDeclaration(currentSegment,methodDeclaration.toString(),pos);}
+ methodDeclaration.append(identifier);
+ {if (true) return new PHPFunctionDeclaration(currentSegment,methodDeclaration.toString(),pos,formalParameters);}
throw new Error("Missing return statement in function");
}
- static final public String FormalParameters() throws ParseException {
+/**
+ * FormalParameters follows method identifier.
+ * (FormalParameter())
+ */
+ static final public Hashtable FormalParameters() throws ParseException {
String expr;
final StringBuffer buff = new StringBuffer("(");
+ PHPVarDeclaration var;
+ final Hashtable parameters = new Hashtable();
try {
jj_consume_token(LPAREN);
} catch (ParseException e) {
- errorMessage = "Formal parameter expected after function identifier";
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', '(' expected after function identifier";
errorLevel = ERROR;
- jj_consume_token(token.kind);
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
+ {if (true) throw e;}
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case DOLLAR:
case BIT_AND:
case DOLLAR_ID:
- expr = FormalParameter();
- buff.append(expr);
+ var = FormalParameter();
+ parameters.put(var.getVariable().getName(),var);
label_7:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -893,8 +1052,8 @@ final StringBuffer buff = new StringBuffer("(");
break label_7;
}
jj_consume_token(COMMA);
- expr = FormalParameter();
- buff.append(",").append(expr);
+ var = FormalParameter();
+ parameters.put(var.getVariable().getName(),var);
}
break;
default:
@@ -906,28 +1065,34 @@ final StringBuffer buff = new StringBuffer("(");
} catch (ParseException e) {
errorMessage = "')' expected";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
- buff.append(")");
- {if (true) return buff.toString();}
+ {if (true) return parameters;}
throw new Error("Missing return statement in function");
}
- static final public String FormalParameter() throws ParseException {
+/**
+ * A formal parameter.
+ * $varname[=value] (,$varname[=value])
+ */
+ static final public PHPVarDeclaration FormalParameter() throws ParseException {
final PHPVarDeclaration variableDeclaration;
- final StringBuffer buff = new StringBuffer();
+ Token token = null;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case BIT_AND:
- jj_consume_token(BIT_AND);
- buff.append("&");
+ token = jj_consume_token(BIT_AND);
break;
default:
jj_la1[24] = jj_gen;
;
}
variableDeclaration = VariableDeclarator();
- buff.append(variableDeclaration.toString());
- {if (true) return buff.toString();}
+ if (token != null) {
+ variableDeclaration.getVariable().setReference(true);
+ }
+ {if (true) return variableDeclaration;}
throw new Error("Missing return statement in function");
}
@@ -935,39 +1100,39 @@ final StringBuffer buff = new StringBuffer("(");
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case STRING:
jj_consume_token(STRING);
- {if (true) return "string";}
+ {if (true) return "string";}
break;
case BOOL:
jj_consume_token(BOOL);
- {if (true) return "bool";}
+ {if (true) return "bool";}
break;
case BOOLEAN:
jj_consume_token(BOOLEAN);
- {if (true) return "boolean";}
+ {if (true) return "boolean";}
break;
case REAL:
jj_consume_token(REAL);
- {if (true) return "real";}
+ {if (true) return "real";}
break;
case DOUBLE:
jj_consume_token(DOUBLE);
- {if (true) return "double";}
+ {if (true) return "double";}
break;
case FLOAT:
jj_consume_token(FLOAT);
- {if (true) return "float";}
+ {if (true) return "float";}
break;
case INT:
jj_consume_token(INT);
- {if (true) return "int";}
+ {if (true) return "int";}
break;
case INTEGER:
jj_consume_token(INTEGER);
- {if (true) return "integer";}
+ {if (true) return "integer";}
break;
case OBJECT:
jj_consume_token(OBJECT);
- {if (true) return "object";}
+ {if (true) return "object";}
break;
default:
jj_la1[25] = jj_gen;
@@ -984,67 +1149,74 @@ final StringBuffer buff = new StringBuffer("(");
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case PRINT:
expr = PrintExpression();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
case LIST:
expr = ListExpression();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
- case ARRAY:
- case NEW:
- case NULL:
- case TRUE:
- case FALSE:
- case INTEGER_LITERAL:
- case FLOATING_POINT_LITERAL:
- case STRING_LITERAL:
- case IDENTIFIER:
- case LPAREN:
- case AT:
- case DOLLAR:
- case BANG:
- case INCR:
- case DECR:
- case PLUS:
- case MINUS:
- case BIT_AND:
- case DOLLAR_ID:
- expr = ConditionalExpression();
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case ASSIGN:
- case PLUSASSIGN:
- case MINUSASSIGN:
- case STARASSIGN:
- case SLASHASSIGN:
- case ANDASSIGN:
- case ORASSIGN:
- case XORASSIGN:
- case DOTASSIGN:
- case REMASSIGN:
- case TILDEEQUAL:
- case LSHIFTASSIGN:
- case RSIGNEDSHIFTASSIGN:
- assignOperator = AssignmentOperator();
- try {
- expr2 = Expression();
- {if (true) return expr + assignOperator + expr2;}
- } catch (ParseException e) {
+ default:
+ jj_la1[26] = jj_gen;
+ if (jj_2_3(2147483647)) {
+ expr = varAssignation();
+ {if (true) return expr;}
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case ARRAY:
+ case NEW:
+ case NULL:
+ case TRUE:
+ case FALSE:
+ case INTEGER_LITERAL:
+ case FLOATING_POINT_LITERAL:
+ case STRING_LITERAL:
+ case IDENTIFIER:
+ case LPAREN:
+ case AT:
+ case DOLLAR:
+ case BANG:
+ case INCR:
+ case DECR:
+ case PLUS:
+ case MINUS:
+ case BIT_AND:
+ case DOLLAR_ID:
+ expr = ConditionalExpression();
+ {if (true) return expr;}
+ break;
+ default:
+ jj_la1[27] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ }
+ }
+ throw new Error("Missing return statement in function");
+ }
+
+/**
+ * A Variable assignation.
+ * varName (an assign operator) any expression
+ */
+ static final public String varAssignation() throws ParseException {
+ String varName,assignOperator,expr2;
+ PHPVarDeclaration variable;
+ final int pos = SimpleCharStream.getPosition();
+ varName = VariableDeclaratorId();
+ assignOperator = AssignmentOperator();
+ try {
+ expr2 = Expression();
+ } catch (ParseException e) {
+ if (errorMessage != null) {
+ {if (true) throw e;}
+ }
errorMessage = "expression expected";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
- }
- break;
- default:
- jj_la1[26] = jj_gen;
- ;
- }
- {if (true) return expr;}
- break;
- default:
- jj_la1[27] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
}
+ {if (true) return varName + assignOperator + expr2;}
throw new Error("Missing return statement in function");
}
@@ -1052,55 +1224,55 @@ final StringBuffer buff = new StringBuffer("(");
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ASSIGN:
jj_consume_token(ASSIGN);
- {if (true) return "=";}
+ {if (true) return "=";}
break;
case STARASSIGN:
jj_consume_token(STARASSIGN);
- {if (true) return "*=";}
+ {if (true) return "*=";}
break;
case SLASHASSIGN:
jj_consume_token(SLASHASSIGN);
- {if (true) return "/=";}
+ {if (true) return "/=";}
break;
case REMASSIGN:
jj_consume_token(REMASSIGN);
- {if (true) return "%=";}
+ {if (true) return "%=";}
break;
case PLUSASSIGN:
jj_consume_token(PLUSASSIGN);
- {if (true) return "+=";}
+ {if (true) return "+=";}
break;
case MINUSASSIGN:
jj_consume_token(MINUSASSIGN);
- {if (true) return "-=";}
+ {if (true) return "-=";}
break;
case LSHIFTASSIGN:
jj_consume_token(LSHIFTASSIGN);
- {if (true) return "<<=";}
+ {if (true) return "<<=";}
break;
case RSIGNEDSHIFTASSIGN:
jj_consume_token(RSIGNEDSHIFTASSIGN);
- {if (true) return ">>=";}
+ {if (true) return ">>=";}
break;
case ANDASSIGN:
jj_consume_token(ANDASSIGN);
- {if (true) return "&=";}
+ {if (true) return "&=";}
break;
case XORASSIGN:
jj_consume_token(XORASSIGN);
- {if (true) return "|=";}
+ {if (true) return "|=";}
break;
case ORASSIGN:
jj_consume_token(ORASSIGN);
- {if (true) return "|=";}
+ {if (true) return "|=";}
break;
case DOTASSIGN:
jj_consume_token(DOTASSIGN);
- {if (true) return ".=";}
+ {if (true) return ".=";}
break;
case TILDEEQUAL:
jj_consume_token(TILDEEQUAL);
- {if (true) return "~=";}
+ {if (true) return "~=";}
break;
default:
jj_la1[28] = jj_gen;
@@ -1342,7 +1514,15 @@ final StringBuffer buff = new StringBuffer("(");
jj_consume_token(-1);
throw new ParseException();
}
- expr = RelationalExpression();
+ try {
+ expr = RelationalExpression();
+ } catch (ParseException e) {
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', expression expected after '"+operator.image+"'";
+ errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
+ {if (true) throw e;}
+ }
buff.append(operator.image);
buff.append(expr);
}
@@ -1476,7 +1656,15 @@ final StringBuffer buff = new StringBuffer("(");
String expr;
Token operator;
final StringBuffer buff = new StringBuffer();
- expr = UnaryExpression();
+ try {
+ expr = UnaryExpression();
+ } catch (ParseException e) {
+ errorMessage = "unexpected token '"+e.currentToken.next.image+"'";
+ errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
+ {if (true) throw e;}
+ }
buff.append(expr);
label_18:
while (true) {
@@ -1506,8 +1694,8 @@ final StringBuffer buff = new StringBuffer("(");
throw new ParseException();
}
expr = UnaryExpression();
- buff.append(operator.image);
- buff.append(expr);
+ buff.append(operator.image);
+ buff.append(expr);
}
{if (true) return buff.toString();}
throw new Error("Missing return statement in function");
@@ -1593,11 +1781,8 @@ final StringBuffer buff = new StringBuffer("(");
{if (true) return token.image + expr;}
break;
case INCR:
- expr = PreIncrementExpression();
- {if (true) return expr;}
- break;
case DECR:
- expr = PreDecrementExpression();
+ expr = PreIncDecExpression();
{if (true) return expr;}
break;
case ARRAY:
@@ -1624,19 +1809,23 @@ final StringBuffer buff = new StringBuffer("(");
throw new Error("Missing return statement in function");
}
- static final public String PreIncrementExpression() throws ParseException {
-final String expr;
- jj_consume_token(INCR);
- expr = PrimaryExpression();
- {if (true) return "++"+expr;}
- throw new Error("Missing return statement in function");
- }
-
- static final public String PreDecrementExpression() throws ParseException {
+ static final public String PreIncDecExpression() throws ParseException {
final String expr;
- jj_consume_token(DECR);
+final Token token;
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case INCR:
+ token = jj_consume_token(INCR);
+ break;
+ case DECR:
+ token = jj_consume_token(DECR);
+ break;
+ default:
+ jj_la1[52] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
expr = PrimaryExpression();
- {if (true) return "--"+expr;}
+ {if (true) return token.image + expr;}
throw new Error("Missing return statement in function");
}
@@ -1646,13 +1835,13 @@ final String expr;
case BANG:
jj_consume_token(BANG);
expr = UnaryExpression();
- {if (true) return "!" + expr;}
+ {if (true) return "!" + expr;}
break;
default:
- jj_la1[52] = jj_gen;
- if (jj_2_3(2147483647)) {
+ jj_la1[53] = jj_gen;
+ if (jj_2_4(2147483647)) {
expr = CastExpression();
- {if (true) return expr;}
+ {if (true) return expr;}
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ARRAY:
@@ -1661,7 +1850,7 @@ final String expr;
case DOLLAR:
case DOLLAR_ID:
expr = PostfixExpression();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
case NULL:
case TRUE:
@@ -1670,7 +1859,7 @@ final String expr;
case FLOATING_POINT_LITERAL:
case STRING_LITERAL:
expr = Literal();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
case LPAREN:
jj_consume_token(LPAREN);
@@ -1680,12 +1869,14 @@ final String expr;
} catch (ParseException e) {
errorMessage = "')' expected";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
{if (true) return "("+expr+")";}
break;
default:
- jj_la1[53] = jj_gen;
+ jj_la1[54] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1697,7 +1888,27 @@ final String expr;
static final public String CastExpression() throws ParseException {
final String type, expr;
jj_consume_token(LPAREN);
- type = Type();
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case STRING:
+ case OBJECT:
+ case BOOL:
+ case BOOLEAN:
+ case REAL:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case INTEGER:
+ type = Type();
+ break;
+ case ARRAY:
+ jj_consume_token(ARRAY);
+ type = "array";
+ break;
+ default:
+ jj_la1[55] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
jj_consume_token(RPAREN);
expr = UnaryExpression();
{if (true) return "(" + type + ")" + expr;}
@@ -1719,13 +1930,13 @@ final String type, expr;
operator = jj_consume_token(DECR);
break;
default:
- jj_la1[54] = jj_gen;
+ jj_la1[56] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[55] = jj_gen;
+ jj_la1[57] = jj_gen;
;
}
if (operator == null) {
@@ -1739,7 +1950,7 @@ final String type, expr;
final Token identifier;
String expr;
final StringBuffer buff = new StringBuffer();
- if (jj_2_4(2)) {
+ if (jj_2_5(2)) {
identifier = jj_consume_token(IDENTIFIER);
jj_consume_token(STATICCLASSACCESS);
expr = ClassIdentifier();
@@ -1753,7 +1964,7 @@ final String type, expr;
;
break;
default:
- jj_la1[56] = jj_gen;
+ jj_la1[58] = jj_gen;
break label_20;
}
expr = PrimarySuffix();
@@ -1777,7 +1988,7 @@ final String type, expr;
;
break;
default:
- jj_la1[57] = jj_gen;
+ jj_la1[59] = jj_gen;
break label_21;
}
expr = PrimarySuffix();
@@ -1790,7 +2001,7 @@ final String type, expr;
{if (true) return "array" + expr;}
break;
default:
- jj_la1[58] = jj_gen;
+ jj_la1[60] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1812,41 +2023,64 @@ final String type, expr;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case IDENTIFIER:
token = jj_consume_token(IDENTIFIER);
- {if (true) return token.image;}
+ {if (true) return token.image;}
break;
case NEW:
jj_consume_token(NEW);
expr = ClassIdentifier();
- {if (true) return "new " + expr;}
+ {if (true) return "new " + expr;}
break;
case DOLLAR:
case DOLLAR_ID:
expr = VariableDeclaratorId();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
default:
- jj_la1[59] = jj_gen;
+ jj_la1[61] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
+ static final public String classInstantiation() throws ParseException {
+ String expr;
+ final StringBuffer buff = new StringBuffer("new ");
+ jj_consume_token(NEW);
+ expr = ClassIdentifier();
+ buff.append(expr);
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case ARRAY:
+ case NEW:
+ case IDENTIFIER:
+ case DOLLAR:
+ case DOLLAR_ID:
+ expr = PrimaryExpression();
+ buff.append(expr);
+ break;
+ default:
+ jj_la1[62] = jj_gen;
+ ;
+ }
+ {if (true) return buff.toString();}
+ throw new Error("Missing return statement in function");
+ }
+
static final public String ClassIdentifier() throws ParseException {
final String expr;
final Token token;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case IDENTIFIER:
token = jj_consume_token(IDENTIFIER);
- {if (true) return token.image;}
+ {if (true) return token.image;}
break;
case DOLLAR:
case DOLLAR_ID:
expr = VariableDeclaratorId();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
default:
- jj_la1[60] = jj_gen;
+ jj_la1[63] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1858,15 +2092,15 @@ final String type, expr;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case LPAREN:
expr = Arguments();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
case CLASSACCESS:
case LBRACKET:
expr = VariableSuffix();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
default:
- jj_la1[61] = jj_gen;
+ jj_la1[64] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1878,19 +2112,36 @@ final String type, expr;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case CLASSACCESS:
jj_consume_token(CLASSACCESS);
- expr = VariableName();
+ try {
+ expr = VariableName();
+ } catch (ParseException e) {
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"', function call or field access expected";
+ errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
+ {if (true) throw e;}
+ }
{if (true) return "->" + expr;}
break;
case LBRACKET:
jj_consume_token(LBRACKET);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ARRAY:
- case PRINT:
case LIST:
+ case PRINT:
case NEW:
case NULL:
case TRUE:
case FALSE:
+ case STRING:
+ case OBJECT:
+ case BOOL:
+ case BOOLEAN:
+ case REAL:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case INTEGER:
case INTEGER_LITERAL:
case FLOATING_POINT_LITERAL:
case STRING_LITERAL:
@@ -1905,10 +2156,49 @@ final String type, expr;
case MINUS:
case BIT_AND:
case DOLLAR_ID:
- expr = Expression();
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case ARRAY:
+ case LIST:
+ case PRINT:
+ case NEW:
+ case NULL:
+ case TRUE:
+ case FALSE:
+ case INTEGER_LITERAL:
+ case FLOATING_POINT_LITERAL:
+ case STRING_LITERAL:
+ case IDENTIFIER:
+ case LPAREN:
+ case AT:
+ case DOLLAR:
+ case BANG:
+ case INCR:
+ case DECR:
+ case PLUS:
+ case MINUS:
+ case BIT_AND:
+ case DOLLAR_ID:
+ expr = Expression();
+ break;
+ case STRING:
+ case OBJECT:
+ case BOOL:
+ case BOOLEAN:
+ case REAL:
+ case DOUBLE:
+ case FLOAT:
+ case INT:
+ case INTEGER:
+ expr = Type();
+ break;
+ default:
+ jj_la1[65] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
break;
default:
- jj_la1[62] = jj_gen;
+ jj_la1[66] = jj_gen;
;
}
try {
@@ -1916,6 +2206,8 @@ final String type, expr;
} catch (ParseException e) {
errorMessage = "']' expected";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
if(expr == null) {
@@ -1924,7 +2216,7 @@ final String type, expr;
{if (true) return "[" + expr + "]";}
break;
default:
- jj_la1[63] = jj_gen;
+ jj_la1[67] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1937,27 +2229,27 @@ final String type, expr;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case INTEGER_LITERAL:
token = jj_consume_token(INTEGER_LITERAL);
- {if (true) return token.image;}
+ {if (true) return token.image;}
break;
case FLOATING_POINT_LITERAL:
token = jj_consume_token(FLOATING_POINT_LITERAL);
- {if (true) return token.image;}
+ {if (true) return token.image;}
break;
case STRING_LITERAL:
token = jj_consume_token(STRING_LITERAL);
- {if (true) return token.image;}
+ {if (true) return token.image;}
break;
case TRUE:
case FALSE:
expr = BooleanLiteral();
- {if (true) return expr;}
+ {if (true) return expr;}
break;
case NULL:
- expr = NullLiteral();
- {if (true) return expr;}
+ jj_consume_token(NULL);
+ {if (true) return "null";}
break;
default:
- jj_la1[64] = jj_gen;
+ jj_la1[68] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1968,33 +2260,27 @@ final String type, expr;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case TRUE:
jj_consume_token(TRUE);
- {if (true) return "true";}
+ {if (true) return "true";}
break;
case FALSE:
jj_consume_token(FALSE);
- {if (true) return "false";}
+ {if (true) return "false";}
break;
default:
- jj_la1[65] = jj_gen;
+ jj_la1[69] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
- static final public String NullLiteral() throws ParseException {
- jj_consume_token(NULL);
- {if (true) return "null";}
- throw new Error("Missing return statement in function");
- }
-
static final public String Arguments() throws ParseException {
String expr = null;
jj_consume_token(LPAREN);
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ARRAY:
- case PRINT:
case LIST:
+ case PRINT:
case NEW:
case NULL:
case TRUE:
@@ -2016,14 +2302,16 @@ String expr = null;
expr = ArgumentList();
break;
default:
- jj_la1[66] = jj_gen;
+ jj_la1[70] = jj_gen;
;
}
try {
jj_consume_token(RPAREN);
} 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;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
if (expr == null) {
@@ -2045,48 +2333,43 @@ final StringBuffer buff = new StringBuffer();
;
break;
default:
- jj_la1[67] = jj_gen;
+ jj_la1[71] = jj_gen;
break label_22;
}
jj_consume_token(COMMA);
try {
expr = Expression();
} catch (ParseException e) {
- errorMessage = "expression expected after a comma in argument list";
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. An expression expected after a comma in argument list";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
- buff.append(",").append(expr);
+ buff.append(",").append(expr);
}
{if (true) return buff.toString();}
throw new Error("Missing return statement in function");
}
-/*
- * Statement syntax follows.
+/**
+ * A Statement without break.
*/
static final public void StatementNoBreak() throws ParseException {
- if (jj_2_5(2)) {
+ if (jj_2_6(2)) {
Expression();
try {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case SEMICOLON:
- jj_consume_token(SEMICOLON);
- break;
- case PHPEND:
- jj_consume_token(PHPEND);
- break;
- default:
- jj_la1[68] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
+ jj_consume_token(SEMICOLON);
} catch (ParseException e) {
- errorMessage = "';' expected";
- errorLevel = ERROR;
- {if (true) throw e;}
+ if (e.currentToken.next.kind != 4) {
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
+ errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
+ {if (true) throw e;}
+ }
}
- } else if (jj_2_6(2)) {
+ } else if (jj_2_7(2)) {
LabeledStatement();
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2107,8 +2390,10 @@ final StringBuffer buff = new StringBuffer();
try {
jj_consume_token(SEMICOLON);
} catch (ParseException e) {
- errorMessage = "';' expected after expression";
+ errorMessage = "unexpected token : '"+ e.currentToken.next.image +"'. A ';' was expected";
errorLevel = ERROR;
+ errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1;
+ errorEnd = jj_input_stream.getPosition() + 1;
{if (true) throw e;}
}
break;
@@ -2149,7 +2434,7 @@ final StringBuffer buff = new StringBuffer();
jj_consume_token(AT);
break;
default:
- jj_la1[69] = jj_gen;
+ jj_la1[72] = jj_gen;
;
}
IncludeStatement();
@@ -2161,17 +2446,21 @@ final StringBuffer buff = new StringBuffer();
GlobalStatement();
break;
default:
- jj_la1[70] = jj_gen;
+ jj_la1[73] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
}
+/**
+ * A Normal statement.
+ */
static final public void Statement() throws ParseException {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case IF:
case ARRAY:
+ case LIST:
case PRINT:
case ECHO:
case INCLUDE:
@@ -2180,7 +2469,6 @@ final StringBuffer buff = new StringBuffer();
case REQUIRE_ONCE:
case GLOBAL:
case STATIC:
- case LIST:
case CONTINUE:
case DO:
case FOR:
@@ -2214,130 +2502,107 @@ final StringBuffer buff = new StringBuffer();
BreakStatement();
break;
default:
- jj_la1[71] = jj_gen;
+ jj_la1[74] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
+/**
+ * An html block inside a php syntax.
+ */
+ static final public void htmlBlock() throws ParseException {
+ jj_consume_token(PHPEND);
+ label_23:
+ while (true) {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case PHPECHOSTART:
+ ;
+ break;
+ default:
+ jj_la1[75] = jj_gen;
+ break label_23;
+ }
+ phpEchoBlock();
+ }
+ try {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case PHPSTARTLONG:
+ jj_consume_token(PHPSTARTLONG);
+ break;
+ case PHPSTARTSHORT:
+ jj_consume_token(PHPSTARTSHORT);
+ break;
+ default:
+ jj_la1[76] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ } catch (ParseException e) {
+ errorMessage = "End of file unexpected, '= 0) {
la1tokens[jj_kind] = true;
jj_kind = -1;
}
- for (int i = 0; i < 122; i++) {
+ for (int i = 0; i < 126; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1< jj_gen) {
@@ -5661,6 +6450,7 @@ final int pos = jj_input_stream.bufpos;
case 4: jj_3_5(); break;
case 5: jj_3_6(); break;
case 6: jj_3_7(); break;
+ case 7: jj_3_8(); break;
}
}
p = p.next;