Created a separated 'externaltools' plugin
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / parser / Parser.java
index 50dc61f..f7000aa 100644 (file)
@@ -194,8 +194,14 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
    */
   private void throwSyntaxError(String error) {
     int problemStartPosition = scanner.getCurrentTokenStartPosition();
-    int problemEndPosition = scanner.getCurrentTokenEndPosition();
-    throwSyntaxError(error, problemStartPosition, problemEndPosition + 1);
+    int problemEndPosition = scanner.getCurrentTokenEndPosition() + 1;
+    if (scanner.source.length <= problemEndPosition && problemEndPosition > 0) {
+      problemEndPosition = scanner.source.length - 1;
+      if (problemStartPosition > 0 && problemStartPosition >= problemEndPosition && problemEndPosition > 0) {
+        problemStartPosition = problemEndPosition - 1;
+      }
+    }
+    throwSyntaxError(error, problemStartPosition, problemEndPosition);
   }
 
   /**
@@ -356,30 +362,9 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
           throwSyntaxError("End-of-file not reached.");
         }
         break;
-      } catch (SyntaxError sytaxErr1) {
+      } catch (SyntaxError syntaxError) {
+        //          syntaxError.printStackTrace();
         break;
-        //        // if an error occured,
-        //        // try to find keywords 'abstract' 'final' 'class' or 'function'
-        //        // to parse the rest of the string
-        //        boolean tokenize = scanner.tokenizeStrings;
-        //        if (!tokenize) {
-        //          scanner.tokenizeStrings = true;
-        //        }
-        //        try {
-        //          while (token != TokenNameEOF) {
-        //            if (token == TokenNameabstract || token == TokenNamefinal || token == TokenNameclass || token == TokenNamefunction) {
-        //              break;
-        //            }
-        //            getNextToken();
-        //          }
-        //          if (token == TokenNameEOF) {
-        //            break;
-        //          }
-        //        } catch (SyntaxError sytaxErr2) {
-        //          break;
-        //        } finally {
-        //          scanner.tokenizeStrings = tokenize;
-        //        }
       }
     } while (true);
 
@@ -798,7 +783,19 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
       }
       return statement;
     } else if (token == TokenNameINLINE_HTML) {
-      getNextToken();
+      if (scanner.phpExpressionTag) {
+        // start of <?= ... ?> block
+        getNextToken();
+        expr();
+        if (token == TokenNameSEMICOLON) {
+          getNextToken();
+        }
+        if (token != TokenNameINLINE_HTML) {
+          throwSyntaxError("Missing '?>' for open PHP expression block ('<?=').");
+        }
+      } else {
+        getNextToken();
+      }
       return statement;
       //    } else if (token == TokenNameprint) {
       //      getNextToken();
@@ -2363,68 +2360,68 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
       //       | '`' encaps_list '`'
       //  | common_scalar
       //       | '`' encaps_list '`'
-      case TokenNameEncapsedString0:
-        scanner.encapsedStringStack.push(new Character('`'));
-        getNextToken();
-        try {
-          if (token == TokenNameEncapsedString0) {
-          } else {
-            encaps_list();
-            if (token != TokenNameEncapsedString0) {
-              throwSyntaxError("\'`\' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
-            }
-          }
-        } finally {
-          scanner.encapsedStringStack.pop();
-          getNextToken();
-        }
-        break;
-      //      | '\'' encaps_list '\''
-      case TokenNameEncapsedString1:
-        scanner.encapsedStringStack.push(new Character('\''));
-        getNextToken();
-        try {
-          exprSourceStart = scanner.getCurrentTokenStartPosition();
-          if (token == TokenNameEncapsedString1) {
-            expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
-                .getCurrentTokenEndPosition());
-          } else {
-            encaps_list();
-            if (token != TokenNameEncapsedString1) {
-              throwSyntaxError("\'\'\' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
-            } else {
-              expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
-                  .getCurrentTokenEndPosition());
-            }
-          }
-        } finally {
-          scanner.encapsedStringStack.pop();
-          getNextToken();
-        }
-        break;
-      //| '"' encaps_list '"'
-      case TokenNameEncapsedString2:
-        scanner.encapsedStringStack.push(new Character('"'));
-        getNextToken();
-        try {
-          exprSourceStart = scanner.getCurrentTokenStartPosition();
-          if (token == TokenNameEncapsedString2) {
-            expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
-                .getCurrentTokenEndPosition());
-          } else {
-            encaps_list();
-            if (token != TokenNameEncapsedString2) {
-              throwSyntaxError("'\"' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
-            } else {
-              expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
-                  .getCurrentTokenEndPosition());
-            }
-          }
-        } finally {
-          scanner.encapsedStringStack.pop();
-          getNextToken();
-        }
-        break;
+      //      case TokenNameEncapsedString0:
+      //        scanner.encapsedStringStack.push(new Character('`'));
+      //        getNextToken();
+      //        try {
+      //          if (token == TokenNameEncapsedString0) {
+      //          } else {
+      //            encaps_list();
+      //            if (token != TokenNameEncapsedString0) {
+      //              throwSyntaxError("\'`\' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
+      //            }
+      //          }
+      //        } finally {
+      //          scanner.encapsedStringStack.pop();
+      //          getNextToken();
+      //        }
+      //        break;
+      //      // | '\'' encaps_list '\''
+      //      case TokenNameEncapsedString1:
+      //        scanner.encapsedStringStack.push(new Character('\''));
+      //        getNextToken();
+      //        try {
+      //          exprSourceStart = scanner.getCurrentTokenStartPosition();
+      //          if (token == TokenNameEncapsedString1) {
+      //            expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
+      //                .getCurrentTokenEndPosition());
+      //          } else {
+      //            encaps_list();
+      //            if (token != TokenNameEncapsedString1) {
+      //              throwSyntaxError("\'\'\' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
+      //            } else {
+      //              expression = new StringLiteralSQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
+      //                  .getCurrentTokenEndPosition());
+      //            }
+      //          }
+      //        } finally {
+      //          scanner.encapsedStringStack.pop();
+      //          getNextToken();
+      //        }
+      //        break;
+      //      //| '"' encaps_list '"'
+      //      case TokenNameEncapsedString2:
+      //        scanner.encapsedStringStack.push(new Character('"'));
+      //        getNextToken();
+      //        try {
+      //          exprSourceStart = scanner.getCurrentTokenStartPosition();
+      //          if (token == TokenNameEncapsedString2) {
+      //            expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
+      //                .getCurrentTokenEndPosition());
+      //          } else {
+      //            encaps_list();
+      //            if (token != TokenNameEncapsedString2) {
+      //              throwSyntaxError("'\"' expected at end of string" + "(Found token: " + scanner.toStringAction(token) + " )");
+      //            } else {
+      //              expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(exprSourceStart), exprSourceStart, scanner
+      //                  .getCurrentTokenEndPosition());
+      //            }
+      //          }
+      //        } finally {
+      //          scanner.encapsedStringStack.pop();
+      //          getNextToken();
+      //        }
+      //        break;
       case TokenNameStringDoubleQuote:
         expression = new StringLiteralDQ(scanner.getCurrentStringLiteralSource(), scanner.getCurrentTokenStartPosition(), scanner
             .getCurrentTokenEndPosition());
@@ -2520,7 +2517,7 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
       case TokenNameIdentifier:
       case TokenNameVariable:
       case TokenNameDOLLAR:
-        boolean rememberedVar = false; 
+        boolean rememberedVar = false;
         Expression lhs = variable(true, true);
         if (lhs != null && lhs instanceof FieldReference && token != TokenNameEQUAL && token != TokenNamePLUS_EQUAL
             && token != TokenNameMINUS_EQUAL && token != TokenNameMULTIPLY_EQUAL && token != TokenNameDIVIDE_EQUAL
@@ -2654,6 +2651,9 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
             getNextToken();
             break;
           } else {
+            //            System.out.println(scanner.getCurrentTokenStartPosition());
+            //            System.out.println(scanner.getCurrentTokenEndPosition());
+
             throwSyntaxError("Error in expression (found token '" + scanner.toStringAction(token) + "').");
           }
         }
@@ -3401,223 +3401,223 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
     getNextToken();
   }
 
-  private void encaps_list() {
-    //                 encaps_list encaps_var
-    //         | encaps_list T_STRING
-    //         | encaps_list T_NUM_STRING
-    //         | encaps_list T_ENCAPSED_AND_WHITESPACE
-    //         | encaps_list T_CHARACTER
-    //         | encaps_list T_BAD_CHARACTER
-    //         | encaps_list '['
-    //         | encaps_list ']'
-    //         | encaps_list '{'
-    //         | encaps_list '}'
-    //         | encaps_list T_OBJECT_OPERATOR
-    //         | /* empty */
-    while (true) {
-      switch (token) {
-      case TokenNameSTRING:
-        getNextToken();
-        break;
-      case TokenNameLBRACE:
-        //          scanner.encapsedStringStack.pop();
-        getNextToken();
-        break;
-      case TokenNameRBRACE:
-        //          scanner.encapsedStringStack.pop();
-        getNextToken();
-        break;
-      case TokenNameLBRACKET:
-        //          scanner.encapsedStringStack.pop();
-        getNextToken();
-        break;
-      case TokenNameRBRACKET:
-        //          scanner.encapsedStringStack.pop();
-        getNextToken();
-        break;
-      case TokenNameMINUS_GREATER:
-        //          scanner.encapsedStringStack.pop();
-        getNextToken();
-        break;
-      case TokenNameVariable:
-      case TokenNameDOLLAR_LBRACE:
-      case TokenNameLBRACE_DOLLAR:
-        encaps_var();
-        break;
-      default:
-        char encapsedChar = ((Character) scanner.encapsedStringStack.peek()).charValue();
-        if (encapsedChar == '$') {
-          scanner.encapsedStringStack.pop();
-          encapsedChar = ((Character) scanner.encapsedStringStack.peek()).charValue();
-          switch (encapsedChar) {
-          case '`':
-            if (token == TokenNameEncapsedString0) {
-              return;
-            }
-            token = TokenNameSTRING;
-            continue;
-          case '\'':
-            if (token == TokenNameEncapsedString1) {
-              return;
-            }
-            token = TokenNameSTRING;
-            continue;
-          case '"':
-            if (token == TokenNameEncapsedString2) {
-              return;
-            }
-            token = TokenNameSTRING;
-            continue;
-          }
-        }
-        return;
-      }
-    }
-  }
+  //  private void encaps_list() {
+  //    // encaps_list encaps_var
+  //    // | encaps_list T_STRING
+  //    // | encaps_list T_NUM_STRING
+  //    // | encaps_list T_ENCAPSED_AND_WHITESPACE
+  //    // | encaps_list T_CHARACTER
+  //    // | encaps_list T_BAD_CHARACTER
+  //    // | encaps_list '['
+  //    // | encaps_list ']'
+  //    // | encaps_list '{'
+  //    // | encaps_list '}'
+  //    // | encaps_list T_OBJECT_OPERATOR
+  //    // | /* empty */
+  //    while (true) {
+  //      switch (token) {
+  //      case TokenNameSTRING:
+  //        getNextToken();
+  //        break;
+  //      case TokenNameLBRACE:
+  //        // scanner.encapsedStringStack.pop();
+  //        getNextToken();
+  //        break;
+  //      case TokenNameRBRACE:
+  //        // scanner.encapsedStringStack.pop();
+  //        getNextToken();
+  //        break;
+  //      case TokenNameLBRACKET:
+  //        // scanner.encapsedStringStack.pop();
+  //        getNextToken();
+  //        break;
+  //      case TokenNameRBRACKET:
+  //        // scanner.encapsedStringStack.pop();
+  //        getNextToken();
+  //        break;
+  //      case TokenNameMINUS_GREATER:
+  //        // scanner.encapsedStringStack.pop();
+  //        getNextToken();
+  //        break;
+  //      case TokenNameVariable:
+  //      case TokenNameDOLLAR_LBRACE:
+  //      case TokenNameLBRACE_DOLLAR:
+  //        encaps_var();
+  //        break;
+  //      default:
+  //        char encapsedChar = ((Character) scanner.encapsedStringStack.peek()).charValue();
+  //        if (encapsedChar == '$') {
+  //          scanner.encapsedStringStack.pop();
+  //          encapsedChar = ((Character) scanner.encapsedStringStack.peek()).charValue();
+  //          switch (encapsedChar) {
+  //          case '`':
+  //            if (token == TokenNameEncapsedString0) {
+  //              return;
+  //            }
+  //            token = TokenNameSTRING;
+  //            continue;
+  //          case '\'':
+  //            if (token == TokenNameEncapsedString1) {
+  //              return;
+  //            }
+  //            token = TokenNameSTRING;
+  //            continue;
+  //          case '"':
+  //            if (token == TokenNameEncapsedString2) {
+  //              return;
+  //            }
+  //            token = TokenNameSTRING;
+  //            continue;
+  //          }
+  //        }
+  //        return;
+  //      }
+  //    }
+  //  }
 
-  private void encaps_var() {
-    //                 T_VARIABLE
-    //         | T_VARIABLE '[' encaps_var_offset ']'
-    //         | T_VARIABLE T_OBJECT_OPERATOR T_STRING
-    //         | T_DOLLAR_OPEN_CURLY_BRACES expr '}'
-    //         | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}'
-    //         | T_CURLY_OPEN variable '}'
-    switch (token) {
-    case TokenNameVariable:
-      getNextToken();
-      if (token == TokenNameLBRACKET) {
-        getNextToken();
-        expr(); //encaps_var_offset();
-        if (token != TokenNameRBRACKET) {
-          throwSyntaxError("']' expected after variable.");
-        }
-        //          scanner.encapsedStringStack.pop();
-        getNextToken();
-        //          }
-      } else if (token == TokenNameMINUS_GREATER) {
-        getNextToken();
-        if (token != TokenNameIdentifier) {
-          throwSyntaxError("Identifier expected after '->'.");
-        }
-        //          scanner.encapsedStringStack.pop();
-        getNextToken();
-      }
-      //        else {
-      //          // scanner.encapsedStringStack.pop();
-      //          int tempToken = TokenNameSTRING;
-      //          if (!scanner.encapsedStringStack.isEmpty()
-      //              && (token == TokenNameEncapsedString0
-      //                  || token == TokenNameEncapsedString1
-      //                  || token == TokenNameEncapsedString2 || token ==
-      // TokenNameERROR)) {
-      //            char encapsedChar = ((Character)
-      // scanner.encapsedStringStack.peek())
-      //                .charValue();
-      //            switch (token) {
-      //              case TokenNameEncapsedString0 :
-      //                if (encapsedChar == '`') {
-      //                  tempToken = TokenNameEncapsedString0;
-      //                }
-      //                break;
-      //              case TokenNameEncapsedString1 :
-      //                if (encapsedChar == '\'') {
-      //                  tempToken = TokenNameEncapsedString1;
-      //                }
-      //                break;
-      //              case TokenNameEncapsedString2 :
-      //                if (encapsedChar == '"') {
-      //                  tempToken = TokenNameEncapsedString2;
-      //                }
-      //                break;
-      //              case TokenNameERROR :
-      //                if (scanner.source[scanner.currentPosition - 1] == '\\') {
-      //                  scanner.currentPosition--;
-      //                  getNextToken();
-      //                }
-      //                break;
-      //            }
-      //          }
-      //          token = tempToken;
-      //        }
-      break;
-    case TokenNameDOLLAR_LBRACE:
-      getNextToken();
-      if (token == TokenNameDOLLAR_LBRACE) {
-        encaps_var();
-      } else if (token == TokenNameIdentifier) {
-        getNextToken();
-        if (token == TokenNameLBRACKET) {
-          getNextToken();
-          //            if (token == TokenNameRBRACKET) {
-          //              getNextToken();
-          //            } else {
-          expr();
-          if (token != TokenNameRBRACKET) {
-            throwSyntaxError("']' expected after '${'.");
-          }
-          getNextToken();
-          //            }
-        }
-      } else {
-        expr();
-      }
-      if (token != TokenNameRBRACE) {
-        throwSyntaxError("'}' expected.");
-      }
-      getNextToken();
-      break;
-    case TokenNameLBRACE_DOLLAR:
-      getNextToken();
-      if (token == TokenNameLBRACE_DOLLAR) {
-        encaps_var();
-      } else if (token == TokenNameIdentifier || token > TokenNameKEYWORD) {
-        getNextToken();
-        if (token == TokenNameLBRACKET) {
-          getNextToken();
-          //            if (token == TokenNameRBRACKET) {
-          //              getNextToken();
-          //            } else {
-          expr();
-          if (token != TokenNameRBRACKET) {
-            throwSyntaxError("']' expected.");
-          }
-          getNextToken();
-          //            }
-        } else if (token == TokenNameMINUS_GREATER) {
-          getNextToken();
-          if (token != TokenNameIdentifier && token != TokenNameVariable) {
-            throwSyntaxError("String or Variable token expected.");
-          }
-          getNextToken();
-          if (token == TokenNameLBRACKET) {
-            getNextToken();
-            //            if (token == TokenNameRBRACKET) {
-            //              getNextToken();
-            //            } else {
-            expr();
-            if (token != TokenNameRBRACKET) {
-              throwSyntaxError("']' expected after '${'.");
-            }
-            getNextToken();
-            //            }
-          }
-        }
-        //          if (token != TokenNameRBRACE) {
-        //            throwSyntaxError("'}' expected after '{$'.");
-        //          }
-        //          // scanner.encapsedStringStack.pop();
-        //          getNextToken();
-      } else {
-        expr();
-        if (token != TokenNameRBRACE) {
-          throwSyntaxError("'}' expected.");
-        }
-        //          scanner.encapsedStringStack.pop();
-        getNextToken();
-      }
-      break;
-    }
-  }
+  //  private void encaps_var() {
+  //    // T_VARIABLE
+  //    // | T_VARIABLE '[' encaps_var_offset ']'
+  //    // | T_VARIABLE T_OBJECT_OPERATOR T_STRING
+  //    // | T_DOLLAR_OPEN_CURLY_BRACES expr '}'
+  //    // | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}'
+  //    // | T_CURLY_OPEN variable '}'
+  //    switch (token) {
+  //    case TokenNameVariable:
+  //      getNextToken();
+  //      if (token == TokenNameLBRACKET) {
+  //        getNextToken();
+  //        expr(); //encaps_var_offset();
+  //        if (token != TokenNameRBRACKET) {
+  //          throwSyntaxError("']' expected after variable.");
+  //        }
+  //        // scanner.encapsedStringStack.pop();
+  //        getNextToken();
+  //        // }
+  //      } else if (token == TokenNameMINUS_GREATER) {
+  //        getNextToken();
+  //        if (token != TokenNameIdentifier) {
+  //          throwSyntaxError("Identifier expected after '->'.");
+  //        }
+  //        // scanner.encapsedStringStack.pop();
+  //        getNextToken();
+  //      }
+  //      // else {
+  //      // // scanner.encapsedStringStack.pop();
+  //      // int tempToken = TokenNameSTRING;
+  //      // if (!scanner.encapsedStringStack.isEmpty()
+  //      // && (token == TokenNameEncapsedString0
+  //      // || token == TokenNameEncapsedString1
+  //      // || token == TokenNameEncapsedString2 || token ==
+  //      // TokenNameERROR)) {
+  //      // char encapsedChar = ((Character)
+  //      // scanner.encapsedStringStack.peek())
+  //      // .charValue();
+  //      // switch (token) {
+  //      // case TokenNameEncapsedString0 :
+  //      // if (encapsedChar == '`') {
+  //      // tempToken = TokenNameEncapsedString0;
+  //      // }
+  //      // break;
+  //      // case TokenNameEncapsedString1 :
+  //      // if (encapsedChar == '\'') {
+  //      // tempToken = TokenNameEncapsedString1;
+  //      // }
+  //      // break;
+  //      // case TokenNameEncapsedString2 :
+  //      // if (encapsedChar == '"') {
+  //      // tempToken = TokenNameEncapsedString2;
+  //      // }
+  //      // break;
+  //      // case TokenNameERROR :
+  //      // if (scanner.source[scanner.currentPosition - 1] == '\\') {
+  //      // scanner.currentPosition--;
+  //      // getNextToken();
+  //      // }
+  //      // break;
+  //      // }
+  //      // }
+  //      // token = tempToken;
+  //      // }
+  //      break;
+  //    case TokenNameDOLLAR_LBRACE:
+  //      getNextToken();
+  //      if (token == TokenNameDOLLAR_LBRACE) {
+  //        encaps_var();
+  //      } else if (token == TokenNameIdentifier) {
+  //        getNextToken();
+  //        if (token == TokenNameLBRACKET) {
+  //          getNextToken();
+  //          // if (token == TokenNameRBRACKET) {
+  //          // getNextToken();
+  //          // } else {
+  //          expr();
+  //          if (token != TokenNameRBRACKET) {
+  //            throwSyntaxError("']' expected after '${'.");
+  //          }
+  //          getNextToken();
+  //          // }
+  //        }
+  //      } else {
+  //        expr();
+  //      }
+  //      if (token != TokenNameRBRACE) {
+  //        throwSyntaxError("'}' expected.");
+  //      }
+  //      getNextToken();
+  //      break;
+  //    case TokenNameLBRACE_DOLLAR:
+  //      getNextToken();
+  //      if (token == TokenNameLBRACE_DOLLAR) {
+  //        encaps_var();
+  //      } else if (token == TokenNameIdentifier || token > TokenNameKEYWORD) {
+  //        getNextToken();
+  //        if (token == TokenNameLBRACKET) {
+  //          getNextToken();
+  //          // if (token == TokenNameRBRACKET) {
+  //          // getNextToken();
+  //          // } else {
+  //          expr();
+  //          if (token != TokenNameRBRACKET) {
+  //            throwSyntaxError("']' expected.");
+  //          }
+  //          getNextToken();
+  //          // }
+  //        } else if (token == TokenNameMINUS_GREATER) {
+  //          getNextToken();
+  //          if (token != TokenNameIdentifier && token != TokenNameVariable) {
+  //            throwSyntaxError("String or Variable token expected.");
+  //          }
+  //          getNextToken();
+  //          if (token == TokenNameLBRACKET) {
+  //            getNextToken();
+  //            // if (token == TokenNameRBRACKET) {
+  //            // getNextToken();
+  //            // } else {
+  //            expr();
+  //            if (token != TokenNameRBRACKET) {
+  //              throwSyntaxError("']' expected after '${'.");
+  //            }
+  //            getNextToken();
+  //            // }
+  //          }
+  //        }
+  //        // if (token != TokenNameRBRACE) {
+  //        // throwSyntaxError("'}' expected after '{$'.");
+  //        // }
+  //        // // scanner.encapsedStringStack.pop();
+  //        // getNextToken();
+  //      } else {
+  //        expr();
+  //        if (token != TokenNameRBRACE) {
+  //          throwSyntaxError("'}' expected.");
+  //        }
+  //        // scanner.encapsedStringStack.pop();
+  //        getNextToken();
+  //      }
+  //      break;
+  //    }
+  //  }
 
   private void encaps_var_offset() {
     //                 T_STRING
@@ -3703,6 +3703,11 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
     }
   }
 
+  /**
+   * Parse and check the include file name
+   * 
+   * @param includeToken
+   */
   private void checkFileName(int includeToken) {
     //<include-token> expr
     int start = scanner.getCurrentTokenStartPosition();
@@ -3765,15 +3770,12 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
           IPath path = PHPFileUtil.determineFilePath(includeNameString, file, project);
 
           if (path == null) {
-            //              reportSyntaxError("File: " + expression.toStringExpression() + " doesn't exist in project: "
-            //                  + project.getLocation().toString(), literal.sourceStart, literal.sourceEnd);
+            // SyntaxError: "File: << >> doesn't exist in project."
             String[] args = { expression.toStringExpression(), project.getLocation().toString() };
             problemReporter.phpIncludeNotExistWarning(args, literal.sourceStart, literal.sourceEnd, referenceContext,
                 compilationUnit.compilationResult);
           } else {
             try {
-              //              String projectPath = ProjectPrefUtil.getDocumentRoot(file.getProject()).toString();
-              //              String filePath = file.getRawLocation().toString();
               String filePath = path.toString();
               String ext = file.getRawLocation().getFileExtension();
               int fileExtensionLength = ext == null ? 0 : ext.length() + 1;
@@ -3902,33 +3904,39 @@ public class Parser implements ITerminalSymbols, CompilerModifiers, ParserBasicI
         throwSyntaxError("'`' expected at end of static string.");
       }
       break;
-    case TokenNameEncapsedString1:
-      try {
-        scanner.currentCharacter = scanner.source[scanner.currentPosition++];
-        while (scanner.currentCharacter != '\'') {
-          if (scanner.currentCharacter == '\\') {
-            scanner.currentPosition++;
-          }
-          scanner.currentCharacter = scanner.source[scanner.currentPosition++];
-        }
-        getNextToken();
-      } catch (IndexOutOfBoundsException e) {
-        throwSyntaxError("'\'' expected at end of static string.");
-      }
+    //    case TokenNameEncapsedString1:
+    //      try {
+    //        scanner.currentCharacter = scanner.source[scanner.currentPosition++];
+    //        while (scanner.currentCharacter != '\'') {
+    //          if (scanner.currentCharacter == '\\') {
+    //            scanner.currentPosition++;
+    //          }
+    //          scanner.currentCharacter = scanner.source[scanner.currentPosition++];
+    //        }
+    //        getNextToken();
+    //      } catch (IndexOutOfBoundsException e) {
+    //        throwSyntaxError("'\'' expected at end of static string.");
+    //      }
+    //      break;
+    //    case TokenNameEncapsedString2:
+    //      try {
+    //        scanner.currentCharacter = scanner.source[scanner.currentPosition++];
+    //        while (scanner.currentCharacter != '"') {
+    //          if (scanner.currentCharacter == '\\') {
+    //            scanner.currentPosition++;
+    //          }
+    //          scanner.currentCharacter = scanner.source[scanner.currentPosition++];
+    //        }
+    //        getNextToken();
+    //      } catch (IndexOutOfBoundsException e) {
+    //        throwSyntaxError("'\"' expected at end of static string.");
+    //      }
+    //      break;
+    case TokenNameStringSingleQuote:
+      getNextToken();
       break;
-    case TokenNameEncapsedString2:
-      try {
-        scanner.currentCharacter = scanner.source[scanner.currentPosition++];
-        while (scanner.currentCharacter != '"') {
-          if (scanner.currentCharacter == '\\') {
-            scanner.currentPosition++;
-          }
-          scanner.currentCharacter = scanner.source[scanner.currentPosition++];
-        }
-        getNextToken();
-      } catch (IndexOutOfBoundsException e) {
-        throwSyntaxError("'\"' expected at end of static string.");
-      }
+    case TokenNameStringDoubleQuote:
+      getNextToken();
       break;
     case TokenNamePLUS:
       getNextToken();