First test
authorkpouer <kpouer>
Mon, 10 Feb 2003 21:36:12 +0000 (21:36 +0000)
committerkpouer <kpouer>
Mon, 10 Feb 2003 21:36:12 +0000 (21:36 +0000)
net.sourceforge.phpeclipse/src/test/PHPParser2.jj [new file with mode: 0644]

diff --git a/net.sourceforge.phpeclipse/src/test/PHPParser2.jj b/net.sourceforge.phpeclipse/src/test/PHPParser2.jj
new file mode 100644 (file)
index 0000000..66fae21
--- /dev/null
@@ -0,0 +1,876 @@
+options {
+  LOOKAHEAD = 1;
+  CHOICE_AMBIGUITY_CHECK = 2;
+  OTHER_AMBIGUITY_CHECK = 1;
+  STATIC = true;
+  DEBUG_PARSER = false;
+  DEBUG_LOOKAHEAD = false;
+  DEBUG_TOKEN_MANAGER = false;
+  ERROR_REPORTING = true;
+  JAVA_UNICODE_ESCAPE = false;
+  UNICODE_INPUT = false;
+  IGNORE_CASE = false;
+  USER_TOKEN_MANAGER = false;
+  USER_CHAR_STREAM = false;
+  BUILD_PARSER = true;
+  BUILD_TOKEN_MANAGER = true;
+  SANITY_CHECK = true;
+  FORCE_LA_CHECK = false;
+}
+
+PARSER_BEGIN(PHPParser2)
+package test;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * A new php parser.
+ * 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 class PHPParser2 {
+  
+  public PHPParser2(IFile fileToParse) throws CoreException {
+         this(fileToParse.getContents());
+  }
+  
+  public void parse() throws ParseException {
+         phpFile();
+  }
+  public static void main(String args[]) throws ParseException {
+    PHPParser2 parser = new PHPParser2(System.in);
+  }
+
+}
+
+PARSER_END(PHPParser2)
+
+
+/* WHITE SPACE */
+
+SKIP :
+{
+  " "
+| "\t"
+| "\n"
+| "\r"
+| "\f"
+}
+
+/* COMMENTS */
+
+MORE :
+{
+  "//" : IN_SINGLE_LINE_COMMENT
+|
+  <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
+|
+  "/*" : IN_MULTI_LINE_COMMENT
+}
+
+<IN_SINGLE_LINE_COMMENT>
+SPECIAL_TOKEN :
+{
+  <SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n" > : DEFAULT
+}
+
+<IN_FORMAL_COMMENT>
+SPECIAL_TOKEN :
+{
+  <FORMAL_COMMENT: "*/" > : DEFAULT
+}
+
+<IN_MULTI_LINE_COMMENT>
+SPECIAL_TOKEN :
+{
+  <MULTI_LINE_COMMENT: "*/" > : DEFAULT
+}
+
+<IN_SINGLE_LINE_COMMENT,IN_FORMAL_COMMENT,IN_MULTI_LINE_COMMENT>
+MORE :
+{
+  < ~[] >
+}
+
+/* KEYWORDS */
+TOKEN :
+{
+  <CLASS : "class">
+| <FUNCTION : "function">
+| <VAR      : "var">
+| <IF       : "if">
+| <ELSEIF   : "elseif">
+| <ELSE     : "else">
+| <ARRAY    : "array">
+}
+
+/* LANGUAGE CONSTRUCT */
+TOKEN :
+{
+  <ECHO : "echo">
+| <GLOBAL : "global">
+| <STATIC : "static">
+}
+
+/* RESERVED WORDS AND LITERALS */
+
+TOKEN :
+{
+  < BREAK: "break" >
+| < CASE: "case" >
+| < CONST: "const" >
+| < CONTINUE: "continue" >
+| < _DEFAULT: "default" >
+| < DO: "do" >
+| < EXTENDS: "extends" >
+| < FALSE: "false" >
+| < FOR: "for" >
+| < GOTO: "goto" >
+| < NEW: "new" >
+| < NULL: "null" >
+| < RETURN: "return" >
+| < SUPER: "super" >
+| < SWITCH: "switch" >
+| < THIS: "this" >
+| < TRUE: "true" >
+| < WHILE: "while" >
+}
+
+/* TYPES */
+
+TOKEN :
+{
+  <STRING : "string">
+| <OBJECT : "object">
+| <BOOL : "bool">
+| <BOOLEAN : "boolean">
+| <REAL : "real">
+| <DOUBLE : "double">
+| <FLOAT : "float">
+| <INT : "int">
+| <INTEGER : "integer">
+}
+
+TOKEN :
+{
+  < _ORL: "OR" >
+| < _ANDL: "AND" >
+}
+
+/* LITERALS */
+
+TOKEN :
+{
+  < INTEGER_LITERAL:
+        <DECIMAL_LITERAL> (["l","L"])?
+      | <HEX_LITERAL> (["l","L"])?
+      | <OCTAL_LITERAL> (["l","L"])?
+  >
+|
+  < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
+|
+  < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
+|
+  < #OCTAL_LITERAL: "0" (["0"-"7"])* >
+|
+  < FLOATING_POINT_LITERAL:
+        (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])?
+      | "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
+      | (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
+      | (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]
+  >
+|
+  < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
+|
+  < STRING_LITERAL: (<STRING_1> | <STRING_2> | <STRING_3>)>
+|    < STRING_1:
+      "\""
+      (   (~["\"","\\","\n","\r"])
+        | ("\\"
+            ( ["n","t","b","r","f","\\","'","\""]
+            | ["0"-"7"] ( ["0"-"7"] )?
+            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
+            )
+          )
+      )*
+      "\""
+    >
+|    < STRING_2:
+      "'"
+      (   (~["\"","\\","\n","\r"])
+        | ("\\"
+            ( ["n","t","b","r","f","\\","'","\""]
+            | ["0"-"7"] ( ["0"-"7"] )?
+            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
+            )
+          )
+      )*
+      "'"
+    >
+|   < STRING_3:
+      "`"
+      (   (~["\"","\\","\n","\r"])
+        | ("\\"
+            ( ["n","t","b","r","f","\\","'","\""]
+            | ["0"-"7"] ( ["0"-"7"] )?
+            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
+            )
+          )
+      )*
+      ""
+    >
+}
+
+/* IDENTIFIERS */
+
+TOKEN :
+{
+  < IDENTIFIER: (<LETTER>|<SPECIAL>) (<LETTER>|<DIGIT>|<SPECIAL>)* >
+|
+  < #LETTER:
+      ["a"-"z"] | ["A"-"Z"]
+  >
+|
+  < #DIGIT:
+      ["0"-"9"]
+  >
+|
+  < #SPECIAL:
+    "_"
+  >
+}
+
+/* SEPARATORS */
+
+TOKEN :
+{
+  < LPAREN: "(" >
+| < RPAREN: ")" >
+| < LBRACE: "{" >
+| < RBRACE: "}" >
+| < LBRACKET: "[" >
+| < RBRACKET: "]" >
+| < SEMICOLON: ";" >
+| < COMMA: "," >
+| < DOT: "." >
+}
+
+/* OPERATORS */
+
+TOKEN :
+{
+  < ASSIGN: "=" >
+| < GT: ">" >
+| < LT: "<" >
+| < BANG: "!" >
+| < TILDE: "~" >
+| < HOOK: "?" >
+| < COLON: ":" >
+| < EQ: "==" >
+| < LE: "<=" >
+| < GE: ">=" >
+| < NE: "!=" >
+| < SC_OR: "||" >
+| < SC_AND: "&&" >
+| < INCR: "++" >
+| < DECR: "--" >
+| < PLUS: "+" >
+| < MINUS: "-" >
+| < STAR: "*" >
+| < SLASH: "/" >
+| < BIT_AND: "&" >
+| < BIT_OR: "|" >
+| < XOR: "^" >
+| < REM: "%" >
+| < LSHIFT: "<<" >
+| < RSIGNEDSHIFT: ">>" >
+| < RUNSIGNEDSHIFT: ">>>" >
+| < PLUSASSIGN: "+=" >
+| < MINUSASSIGN: "-=" >
+| < STARASSIGN: "*=" >
+| < SLASHASSIGN: "/=" >
+| < ANDASSIGN: "&=" >
+| < ORASSIGN: "|=" >
+| < XORASSIGN: "^=" >
+| < REMASSIGN: "%=" >
+| < LSHIFTASSIGN: "<<=" >
+| < RSIGNEDSHIFTASSIGN: ">>=" >
+| < RUNSIGNEDSHIFTASSIGN: ">>>=" >
+}
+
+
+/*****************************************
+ * THE JAVA LANGUAGE GRAMMAR STARTS HERE *
+ *****************************************/
+
+/*
+ * Program structuring syntax follows.
+ */
+
+void phpFile() :
+{}
+{
+  (BlockStatement())*
+  <EOF>
+}
+
+void ClassDeclaration() :
+{}
+{
+  "class" <IDENTIFIER> [ "extends" <IDENTIFIER> ]
+  ClassBody()
+}
+
+void ClassBody() :
+{}
+{
+  "{" ( ClassBodyDeclaration() )* "}"
+}
+
+void ClassBodyDeclaration() :
+{}
+{
+  MethodDeclaration()
+|
+  FieldDeclaration()
+}
+
+void FieldDeclaration() :
+{}
+{
+  "var" VariableDeclarator() ( "," VariableDeclarator() )* ";"
+}
+
+void VariableDeclarator() :
+{}
+{
+  VariableDeclaratorId() [ "=" VariableInitializer() ]
+}
+
+void VariableDeclaratorId() :
+{}
+{
+  "$" VariableName() ( LOOKAHEAD(2) VariableSuffix() )*
+}
+
+void VariableName():
+{}
+{
+  "this"
+|
+  <IDENTIFIER>
+|
+  "$" VariableName()
+}
+
+void VariableInitializer() :
+{}
+{
+  Expression()
+}
+
+void ArrayVariable() :
+{}
+{
+  Expression() ("=>" Expression())*
+}
+
+void ArrayInitializer() :
+{}
+{
+  "(" [ ArrayVariable() ( LOOKAHEAD(2) "," ArrayVariable() )* ] [ "," ] ")"
+}
+
+void MethodDeclaration() :
+{}
+{
+  "function" MethodDeclarator()
+  ( Block() | ";" )
+}
+
+void MethodDeclarator() :
+{}
+{
+  ["&"] <IDENTIFIER> FormalParameters()
+}
+
+void FormalParameters() :
+{}
+{
+  "(" [ FormalParameter() ( "," FormalParameter() )* ] ")"
+}
+
+void FormalParameter() :
+{}
+{
+  ["&"] VariableDeclarator()
+}
+
+void Type() :
+{}
+{
+  "string"
+|
+  "bool"
+|
+  "boolean"
+|
+  "real"
+|
+  "double"
+|
+  "float"
+|
+  "int"
+|
+  "integer"
+}
+
+/*
+ * Expression syntax follows.
+ */
+
+void Expression() :
+/*
+ * This expansion has been written this way instead of:
+ *   Assignment() | ConditionalExpression()
+ * for performance reasons.
+ * However, it is a weakening of the grammar for it allows the LHS of
+ * assignments to be any conditional expression whereas it can only be
+ * a primary expression.  Consider adding a semantic predicate to work
+ * around this.
+ */
+{}
+{
+  ConditionalExpression()
+  [
+    AssignmentOperator() Expression()
+  ]
+}
+
+void AssignmentOperator() :
+{}
+{
+  "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | ">>>=" | "&=" | "^=" | "|=" | ".="
+}
+
+void ConditionalExpression() :
+{}
+{
+  ConditionalOrExpression() [ "?" Expression() ":" ConditionalExpression() ]
+}
+
+void ConditionalOrExpression() :
+{}
+{
+  ConditionalAndExpression() ( ("||" | "OR") ConditionalAndExpression() )*
+}
+
+void ConditionalAndExpression() :
+{}
+{
+  ConcatExpression() ( ("&&" | "AND") ConcatExpression() )*
+}
+
+void ConcatExpression() :
+{}
+{
+  InclusiveOrExpression() ( "." InclusiveOrExpression() )*
+}
+
+void InclusiveOrExpression() :
+{}
+{
+  ExclusiveOrExpression() ( "|" ExclusiveOrExpression() )*
+}
+
+void ExclusiveOrExpression() :
+{}
+{
+  AndExpression() ( "^" AndExpression() )*
+}
+
+void AndExpression() :
+{}
+{
+  EqualityExpression() ( "&" EqualityExpression() )*
+}
+
+void EqualityExpression() :
+{}
+{
+  RelationalExpression() ( ( "==" | "!=" ) RelationalExpression() )*
+}
+
+void RelationalExpression() :
+{}
+{
+  ShiftExpression() ( ( "<" | ">" | "<=" | ">=" ) ShiftExpression() )*
+}
+
+void ShiftExpression() :
+{}
+{
+  AdditiveExpression() ( ( "<<" | ">>" | ">>>" ) AdditiveExpression() )*
+}
+
+void AdditiveExpression() :
+{}
+{
+  MultiplicativeExpression() ( ( "+" | "-" ) MultiplicativeExpression() )*
+}
+
+void MultiplicativeExpression() :
+{}
+{
+  UnaryExpression() ( ( "*" | "/" | "%" ) UnaryExpression() )*
+}
+
+void UnaryExpression() :
+{}
+{
+  "@" UnaryExpression()
+|
+  ( "+" | "-" ) UnaryExpression()
+|
+  PreIncrementExpression()
+|
+  PreDecrementExpression()
+|
+  UnaryExpressionNotPlusMinus()
+}
+
+void PreIncrementExpression() :
+{}
+{
+  "++" PrimaryExpression()
+}
+
+void PreDecrementExpression() :
+{}
+{
+  "--" PrimaryExpression()
+}
+
+void UnaryExpressionNotPlusMinus() :
+{}
+{
+  ( "~" | "!" ) UnaryExpression()
+|
+  LOOKAHEAD( "(" Type() ")" )
+  CastExpression()
+|
+  PostfixExpression()
+|
+  Literal()
+|
+  "("Expression()")"
+}
+
+void CastExpression() :
+{}
+{
+  "(" Type() ")" UnaryExpression()
+}
+
+void PostfixExpression() :
+{}
+{
+  PrimaryExpression() [ "++" | "--" ]
+}
+
+void PrimaryExpression() :
+{}
+{
+  LOOKAHEAD(2)
+  <IDENTIFIER> "::" ClassIdentifier() (PrimarySuffix())*
+|
+  PrimaryPrefix() ( PrimarySuffix() )*
+|
+  "array" ArrayInitializer()
+}
+
+void PrimaryPrefix() :
+{}
+{
+  "$this"
+|
+  <IDENTIFIER>
+|
+  "new" ClassIdentifier()
+|  
+  VariableDeclaratorId()
+}
+
+void ClassIdentifier():
+{}
+{
+  <IDENTIFIER>
+|
+  VariableDeclaratorId()
+|
+  "$this"
+}
+
+void PrimarySuffix() :
+{}
+{
+  Arguments()
+|
+  VariableSuffix()
+}
+
+void VariableSuffix() :
+{}
+{
+  "->" VariableName()
+| 
+  "[" Expression() "]"
+}
+
+void Literal() :
+{}
+{
+  <INTEGER_LITERAL>
+|
+  <FLOATING_POINT_LITERAL>
+|
+  <STRING_LITERAL>
+|
+  BooleanLiteral()
+|
+  NullLiteral()
+}
+
+void BooleanLiteral() :
+{}
+{
+  "true"
+|
+  "false"
+}
+
+void NullLiteral() :
+{}
+{
+  "null"
+}
+
+void Arguments() :
+{}
+{
+  "(" [ ArgumentList() ] ")"
+}
+
+void ArgumentList() :
+{}
+{
+  Expression() ( "," Expression() )*
+}
+
+/*
+ * Statement syntax follows.
+ */
+
+void Statement() :
+{}
+{
+  LOOKAHEAD(2)
+  LabeledStatement()
+|
+  LOOKAHEAD(2)
+  Expression() ";"
+|
+  Block()
+|
+  EmptyStatement()
+|
+  StatementExpression() ";"
+|
+  SwitchStatement()
+|
+  IfStatement()
+|
+  WhileStatement()
+|
+  DoStatement()
+|
+  ForStatement()
+|
+  BreakStatement()
+|
+  ContinueStatement()
+|
+  ReturnStatement()
+|
+  EchoStatement()
+|
+  StaticStatement()
+}
+
+void EchoStatement() :
+{}
+{
+  "echo" Expression() ("," Expression())* ";"
+}
+
+void GlobalStatement() :
+{}
+{
+  "global" VariableDeclaratorId() ("," VariableDeclaratorId())* ";"
+}
+
+void StaticStatement() :
+{}
+{
+  "static" VariableDeclarator() ("," VariableDeclarator())* ";"
+}
+
+void LabeledStatement() :
+{}
+{
+  <IDENTIFIER> ":" Statement()
+}
+
+void Block() :
+{}
+{
+  "{" ( BlockStatement() )* "}"
+}
+
+void BlockStatement() :
+{}
+{
+  Statement()
+|
+  ClassDeclaration()
+|
+  MethodDeclaration()
+}
+
+void LocalVariableDeclaration() :
+{}
+{
+  VariableDeclarator() ( "," VariableDeclarator() )*
+}
+
+void EmptyStatement() :
+{}
+{
+  ";"
+}
+
+void StatementExpression() :
+/*
+ * The last expansion of this production accepts more than the legal
+ * Java expansions for StatementExpression.  This expansion does not
+ * use PostfixExpression for performance reasons.
+ */
+{}
+{
+  PreIncrementExpression()
+|
+  PreDecrementExpression()
+|
+  PrimaryExpression()
+  [
+    "++"
+  |
+    "--"
+  |
+    AssignmentOperator() Expression()
+  ]
+}
+
+void SwitchStatement() :
+{}
+{
+  "switch" "(" Expression() ")" "{"
+    ( SwitchLabel() ( BlockStatement() )* )*
+  "}"
+}
+
+void SwitchLabel() :
+{}
+{
+  "case" Expression() ":"
+|
+  "default" ":"
+}
+
+void IfStatement() :
+/*
+ * The disambiguating algorithm of JavaCC automatically binds dangling
+ * else's to the innermost if statement.  The LOOKAHEAD specification
+ * is to tell JavaCC that we know what we are doing.
+ */
+{}
+{
+  "if" "(" Expression() ")" Statement() [ LOOKAHEAD(1) ElseIfStatement() ] [ LOOKAHEAD(1) "else" Statement() ]
+}
+
+void ElseIfStatement() :
+{}
+{
+  "elseif" "(" Expression() ")" Statement()
+}
+
+void WhileStatement() :
+{}
+{
+  "while" "(" Expression() ")" Statement()
+}
+
+void DoStatement() :
+{}
+{
+  "do" Statement() "while" "(" Expression() ")" ";"
+}
+
+void ForStatement() :
+{}
+{
+  "for" "(" [ ForInit() ] ";" [ Expression() ] ";" [ ForUpdate() ] ")" Statement()
+}
+
+void ForInit() :
+{}
+{
+  LOOKAHEAD(LocalVariableDeclaration())
+  LocalVariableDeclaration()
+|
+  StatementExpressionList()
+}
+
+void StatementExpressionList() :
+{}
+{
+  StatementExpression() ( "," StatementExpression() )*
+}
+
+void ForUpdate() :
+{}
+{
+  StatementExpressionList()
+}
+
+void BreakStatement() :
+{}
+{
+  "break" [ <IDENTIFIER> ] ";"
+}
+
+void ContinueStatement() :
+{}
+{
+  "continue" [ <IDENTIFIER> ] ";"
+}
+
+void ReturnStatement() :
+{}
+{
+  "return" [ Expression() ] ";"
+}
\ No newline at end of file