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 02ad35b..bc7c112 100644 --- a/net.sourceforge.phpeclipse/src/test/PHPParser.java +++ b/net.sourceforge.phpeclipse/src/test/PHPParser.java @@ -16,6 +16,7 @@ import java.text.MessageFormat; import net.sourceforge.phpeclipse.actions.PHPStartApacheAction; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpdt.internal.compiler.parser.*; +import net.sourceforge.phpdt.internal.compiler.ast.*; /** * A new php parser. @@ -34,7 +35,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon 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; @@ -47,6 +48,13 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon 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; } @@ -66,6 +74,7 @@ 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(); } @@ -76,6 +85,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon 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. @@ -88,6 +98,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon jj_input_stream = new SimpleCharStream(stream, 1, 1); } ReInit(stream); + astStack = new AstNode[AstStackIncrement]; phpFile(); } @@ -99,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) { @@ -223,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) { @@ -252,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(); } @@ -604,6 +617,7 @@ public final class PHPParser extends PHPParserSuperclass implements PHPParserCon PHPVarDeclaration variableDeclaration; jj_consume_token(VAR); variableDeclaration = VariableDeclarator(); + outlineInfo.addVariable(variableDeclaration.getVariable().getName()); if (currentSegment != null) { currentSegment.add(variableDeclaration); } @@ -665,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)) { @@ -674,7 +688,7 @@ 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) { @@ -938,6 +952,7 @@ final StringBuffer buff = new StringBuffer("("); functionToken = jj_consume_token(FUNCTION); try { functionDeclaration = MethodDeclarator(); + outlineInfo.addVariable(functionDeclaration.getName()); } catch (ParseException e) { if (errorMessage != null) { {if (true) throw e;} @@ -1085,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; @@ -1134,17 +1149,17 @@ 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; default: jj_la1[26] = jj_gen; if (jj_2_3(2147483647)) { expr = varAssignation(); - {if (true) return expr;} + {if (true) return expr;} } else { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ARRAY: @@ -1167,7 +1182,7 @@ final StringBuffer buff = new StringBuffer("("); case BIT_AND: case DOLLAR_ID: expr = ConditionalExpression(); - {if (true) return expr;} + {if (true) return expr;} break; default: jj_la1[27] = jj_gen; @@ -1209,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; @@ -1820,13 +1835,13 @@ final Token token; case BANG: jj_consume_token(BANG); expr = UnaryExpression(); - {if (true) return "!" + expr;} + {if (true) return "!" + expr;} break; default: 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: @@ -1835,7 +1850,7 @@ final Token token; case DOLLAR: case DOLLAR_ID: expr = PostfixExpression(); - {if (true) return expr;} + {if (true) return expr;} break; case NULL: case TRUE: @@ -1844,7 +1859,7 @@ final Token token; case FLOATING_POINT_LITERAL: case STRING_LITERAL: expr = Literal(); - {if (true) return expr;} + {if (true) return expr;} break; case LPAREN: jj_consume_token(LPAREN); @@ -1854,8 +1869,8 @@ final Token token; } catch (ParseException e) { errorMessage = "')' expected"; errorLevel = ERROR; - errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1; - errorEnd = jj_input_stream.getPosition() + 1; + 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+")";} @@ -2008,17 +2023,17 @@ 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[61] = jj_gen; @@ -2057,12 +2072,12 @@ 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 DOLLAR: case DOLLAR_ID: expr = VariableDeclaratorId(); - {if (true) return expr;} + {if (true) return expr;} break; default: jj_la1[63] = jj_gen; @@ -2077,12 +2092,12 @@ 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[64] = jj_gen; @@ -2214,24 +2229,24 @@ 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: jj_consume_token(NULL); - {if (true) return "null";} + {if (true) return "null";} break; default: jj_la1[68] = jj_gen; @@ -2245,11 +2260,11 @@ 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[69] = jj_gen; @@ -2325,20 +2340,20 @@ final StringBuffer buff = new StringBuffer(); 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; + 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"); } /** - * A Statement without break + * A Statement without break. */ static final public void StatementNoBreak() throws ParseException { if (jj_2_6(2)) { @@ -2377,8 +2392,8 @@ final StringBuffer buff = new StringBuffer(); } catch (ParseException e) { 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; + errorStart = jj_input_stream.getPosition() - e.currentToken.next.image.length() + 1; + errorEnd = jj_input_stream.getPosition() + 1; {if (true) throw e;} } break; @@ -2439,7 +2454,7 @@ final StringBuffer buff = new StringBuffer(); } /** - * A Normal statement + * A Normal statement. */ static final public void Statement() throws ParseException { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { @@ -2493,6 +2508,9 @@ final StringBuffer buff = new StringBuffer(); } } +/** + * An html block inside a php syntax. + */ static final public void htmlBlock() throws ParseException { jj_consume_token(PHPEND); label_23: @@ -2507,17 +2525,25 @@ final StringBuffer buff = new StringBuffer(); } phpEchoBlock(); } - 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(); + 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, '