X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java index 2a0e2c1..c9b73cf 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java @@ -23,7 +23,7 @@ import net.sourceforge.phpeclipse.internal.compiler.ast.CompilationUnitDeclarati import net.sourceforge.phpeclipse.internal.compiler.ast.MethodDeclaration; import net.sourceforge.phpeclipse.internal.compiler.ast.SingleTypeReference; import net.sourceforge.phpeclipse.internal.compiler.ast.TypeDeclaration; -import net.sourceforge.phpeclipse.phpeditor.PHPString; + import org.eclipse.core.resources.IFile; public class Parser //extends PHPParserSuperclass implements ITerminalSymbols, CompilerModifiers, ParserBasicInformation { @@ -1111,7 +1111,7 @@ public class Parser //extends PHPParserSuperclass if (token == TokenNameSEMICOLON) { getNextToken(); } else { - if (token != TokenNameStopPHP) { + if (token != TokenNameINLINE_HTML) { throwSyntaxError("';' expected after do-while statement."); } getNextToken(); @@ -1151,7 +1151,7 @@ public class Parser //extends PHPParserSuperclass if (token == TokenNameSEMICOLON) { getNextToken(); } else { - if (token != TokenNameStopPHP) { + if (token != TokenNameINLINE_HTML) { throwSyntaxError("';' expected after 'continue', 'break' or 'return'."); } getNextToken(); @@ -1163,12 +1163,15 @@ public class Parser //extends PHPParserSuperclass if (token == TokenNameSEMICOLON) { getNextToken(); } else { - if (token != TokenNameStopPHP) { + if (token != TokenNameINLINE_HTML) { throwSyntaxError("';' expected after 'echo' statement."); } getNextToken(); } return; + } else if (token == TokenNameINLINE_HTML) { + getNextToken(); + return; // } else if (token == TokenNameprint) { // getNextToken(); // expression(); @@ -1187,7 +1190,7 @@ public class Parser //extends PHPParserSuperclass if (token == TokenNameSEMICOLON) { getNextToken(); } else { - if (token != TokenNameStopPHP) { + if (token != TokenNameINLINE_HTML) { throwSyntaxError("';' expected after 'global' statement."); } getNextToken(); @@ -1199,7 +1202,7 @@ public class Parser //extends PHPParserSuperclass if (token == TokenNameSEMICOLON) { getNextToken(); } else { - if (token != TokenNameStopPHP) { + if (token != TokenNameINLINE_HTML) { throwSyntaxError("';' expected after 'static' statement."); } getNextToken(); @@ -1221,59 +1224,12 @@ public class Parser //extends PHPParserSuperclass if (token == TokenNameSEMICOLON) { getNextToken(); } else { - if (token != TokenNameStopPHP) { + if (token != TokenNameINLINE_HTML) { throwSyntaxError("';' expected after 'unset' statement."); } getNextToken(); } return; - // } else if (token == TokenNameexit || token == TokenNamedie) { - // getNextToken(); - // if (token != TokenNameSEMICOLON) { - // exitStatus(); - // } - // if (token == TokenNameSEMICOLON) { - // getNextToken(); - // } else { - // if (token != TokenNameStopPHP) { - // throwSyntaxError("';' expected after 'exit' or 'die' - // statement."); - // } - // getNextToken(); - // } - // return; - // } else if (token == TokenNamedefine) { - // getNextToken(); - // if (token == TokenNameLPAREN) { - // getNextToken(); - // } else { - // throwSyntaxError("'(' expected after 'define' keyword."); - // } - // expr(); - // if (token == TokenNameCOMMA) { - // getNextToken(); - // } else { - // throwSyntaxError("',' expected after first 'define' constant."); - // } - // expr(); - // if (token == TokenNameCOMMA) { - // getNextToken(); - // expr(); - // } - // if (token == TokenNameRPAREN) { - // getNextToken(); - // } else { - // throwSyntaxError("')' expected after 'define' statement."); - // } - // if (token == TokenNameSEMICOLON) { - // getNextToken(); - // } else { - // if (token != TokenNameStopPHP) { - // throwSyntaxError("';' expected after 'define' statement."); - // } - // getNextToken(); - // } - // return; } else if (token == TokenNamefunction) { MethodDeclaration methodDecl = new MethodDeclaration( this.compilationUnit.compilationResult); @@ -1282,6 +1238,57 @@ public class Parser //extends PHPParserSuperclass getNextToken(); functionDefinition(methodDecl); return; + } else if (token == TokenNametry) { + getNextToken(); +if (token != TokenNameLBRACE) { + throwSyntaxError("'{' expected in 'try' statement."); + } + getNextToken(); + statementList(); +if (token != TokenNameRBRACE) { + throwSyntaxError("'}' expected in 'try' statement."); + } +getNextToken(); + return; + } else if (token == TokenNamecatch) { +getNextToken(); +if (token != TokenNameLPAREN) { + throwSyntaxError("'(' expected in 'catch' statement."); + } + getNextToken(); + fully_qualified_class_name(); + if (token != TokenNameVariable) { + throwSyntaxError("Variable expected in 'catch' statement."); + } + getNextToken(); + + if (token != TokenNameRBRACE) { + throwSyntaxError("')' expected in 'catch' statement."); + } + getNextToken(); +getNextToken(); +if (token != TokenNameLBRACE) { + throwSyntaxError("'{' expected in 'catch' statement."); + } + getNextToken(); + statementList(); +if (token != TokenNameRBRACE) { + throwSyntaxError("'}' expected in 'catch' statement."); + } +getNextToken(); + additional_catches(); + return; + } else if (token == TokenNamethrow) { + getNextToken(); + + expr(); + if (token == TokenNameSEMICOLON) { + getNextToken(); + } else { + throwSyntaxError("';' expected after 'throw' exxpression."); + } + + return; } else if (token == TokenNamefinal || token == TokenNameabstract || token == TokenNameclass || token == TokenNameinterface) { TypeDeclaration typeDecl = new TypeDeclaration( @@ -1320,7 +1327,7 @@ public class Parser //extends PHPParserSuperclass getNextToken(); return; } else { - if (token != TokenNameStopPHP && token != TokenNameEOF) { + if (token != TokenNameINLINE_HTML && token != TokenNameEOF) { throwSyntaxError("';' expected after expression (Found token: " + scanner.toStringAction(token) + ")"); } @@ -1328,6 +1335,36 @@ public class Parser //extends PHPParserSuperclass } } } + private void additional_catches() { + while (token == TokenNamecatch) { + getNextToken(); + if (token != TokenNameLPAREN) { + throwSyntaxError("'(' expected in 'catch' statement."); + } + getNextToken(); + fully_qualified_class_name(); + if (token != TokenNameVariable) { + throwSyntaxError("Variable expected in 'catch' statement."); + } + getNextToken(); + + if (token != TokenNameRBRACE) { + throwSyntaxError("')' expected in 'catch' statement."); + } + getNextToken(); + getNextToken(); + if (token != TokenNameLBRACE) { + throwSyntaxError("'{' expected in 'catch' statement."); + } + getNextToken(); + statementList(); + if (token != TokenNameRBRACE) { + throwSyntaxError("'}' expected in 'catch' statement."); + } + getNextToken(); + } + } + private void global_var_list() { // global_var_list: // global_var_list ',' global_var @@ -2388,7 +2425,7 @@ public class Parser //extends PHPParserSuperclass } break; default : - if (token != TokenNameStopPHP) { + if (token != TokenNameINLINE_HTML) { throwSyntaxError("Error in expression (found token '" + scanner.toStringAction(token) + "')."); } @@ -2901,9 +2938,13 @@ public class Parser //extends PHPParserSuperclass if (Scanner.TRACE) { System.out.println("TRACE: variable_name()"); } - if (token == TokenNameIdentifier) { + if (token == TokenNameIdentifier || token > TokenNameKEYWORD) { + if (token > TokenNameKEYWORD) { + // TODO show a warning "Keyword used as variable" ? + } getNextToken(); } else { + if (token != TokenNameLBRACE) { throwSyntaxError("'{' expected in variable name."); } @@ -3234,7 +3275,7 @@ public class Parser //extends PHPParserSuperclass break; } getNextToken(); - if (token != TokenNameRPAREN) { + if (token == TokenNameRPAREN) { break; } }