misc parser changes
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / parser / Parser.java
index 2a0e2c1..c9b73cf 100644 (file)
@@ -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;
       }
     }