[prev in list] [next in list] [prev in thread] [next in thread] 

List:       jedit-cvs
Subject:    [ jEdit-CVS ] plugins/JavaSideKick/src/sidekick/java/parser Tiger.jj,1.8,1.9
From:       Dale Anson <daleanson () users ! sourceforge ! net>
Date:       2006-03-27 22:09:07
Message-ID: E1FNztc-0008Sb-Q0 () mail ! sourceforge ! net
[Download RAW message or body]

Update of /cvsroot/jedit/plugins/JavaSideKick/src/sidekick/java/parser
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14957

Modified Files:
	Tiger.jj 
Log Message:
Added special handling for javacc keywords, using semantic lookahead technique.



Index: Tiger.jj
===================================================================
RCS file: /cvsroot/jedit/plugins/JavaSideKick/src/sidekick/java/parser/Tiger.jj,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- Tiger.jj	26 Mar 2006 21:15:57 -0000	1.8
+++ Tiger.jj	27 Mar 2006 22:09:05 -0000	1.9
@@ -75,6 +75,10 @@
    
    private InputStream inputStream = null;
    
+   public static final int JAVA_MODE = 1;
+   public static final int JAVACC_MODE = 2;
+   private int mode = JAVA_MODE;
+   
     /**
      * Constructor for TigerParser.  Note that JavaSideKick does not use this 
      * constructor -- since the options for building the parser have both
@@ -194,27 +198,6 @@
 PARSER_END(TigerParser)
 
 
-/**********************************************
- * THE JAVACC TOKEN SPECIFICATION STARTS HERE *
- **********************************************/
-
-/* JAVACC RESERVED WORDS: These are the only tokens in JavaCC but not in Java */
-
-TOKEN :
-{
-  < _OPTIONS: "options" (" ")* "{" >
-| < _LOOKAHEAD: "LOOKAHEAD" >
-| < _IGNORE_CASE: "IGNORE_CASE" >
-| < _PARSER_BEGIN: "PARSER_BEGIN" >
-| < _PARSER_END: "PARSER_END" >
-| < _JAVACODE: "JAVACODE" >
-| < _TOKEN: "TOKEN" >
-| < _SPECIAL_TOKEN: "SPECIAL_TOKEN" >
-| < _MORE: "MORE" >
-| < _SKIP: "SKIP" >
-| < _TOKEN_MGR_DECLS: "TOKEN_MGR_DECLS" >
-| < _EOF: "EOF" >
-}
 
 /********************************************
  * THE JAVA TOKEN SPECIFICATION STARTS HERE *
@@ -334,6 +317,28 @@
 | < WHILE: "while" >
 }
 
+/* JAVACC RESERVED WORDS: These are the only tokens in JavaCC but not in Java */
+/* danson, using these keywords as tokens causes problems when parsing java
+code, so I'm replacing these keyworks with semantic lookahead as described in
+the javacc faq. */
+/*
+TOKEN :
+{
+  < _OPTIONS: "options" >
+| < _LOOKAHEAD: "LOOKAHEAD" >
+| < _IGNORE_CASE: "IGNORE_CASE" >
+| < _PARSER_BEGIN: "PARSER_BEGIN" >
+| < _PARSER_END: "PARSER_END" >
+| < _JAVACODE: "JAVACODE" >
+| < _TOKEN: "TOKEN" >
+| < _SPECIAL_TOKEN: "SPECIAL_TOKEN" >
+| < _MORE: "MORE" >
+| < _SKIP: "SKIP" >
+| < _TOKEN_MGR_DECLS: "TOKEN_MGR_DECLS" >
+| < _EOF: "EOF" >
+}
+*/
+
 /* LITERALS */
 
 TOKEN :
@@ -507,11 +512,14 @@
 }
 
 
+
+
 /************************************************
  * THE JAVACC GRAMMAR SPECIFICATION STARTS HERE *
  ************************************************/
 CUNode getJavaCCRootNode(int tab_size) :
 {
+    mode = JAVACC_MODE;
     setTabSize(tab_size);
     CUNode n = new CUNode();
     List children = null;
@@ -543,7 +551,9 @@
 }
 {
   options_node=javacc_options()
-  parser_node_start_t=<_PARSER_BEGIN> "(" identifier() cunode_start_t=")"
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("PARSER_BEGIN")} ) +  // ignore warning, special handling \
for javacc keyword +  parser_node_start_t=<IDENTIFIER> "(" identifier() \
cunode_start_t=")"  cunode=CompilationUnit(getTabSize())
   /*
   {
@@ -552,7 +562,9 @@
     System.out.println("+++++ cunode = " + cunode);
   }
   */
-  cunode_end_t=<_PARSER_END> "(" identifier() parser_node_end_t=")"
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("PARSER_END")} ) +  // ignore warning, special handling for \
javacc keyword +  cunode_end_t=<IDENTIFIER> "(" identifier() parser_node_end_t=")"
   ( production_node=production() { children.add(production_node); } )+
   <EOF>
   
@@ -589,8 +601,9 @@
     Token end_t = null;
 }
 {
-  //[ start_t="options" "{" ( option_binding() )+ end_t="}" ]
-  [ start_t=<_OPTIONS> ( option_binding() )+ end_t="}" ]
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && getToken(1).image.equals("options")} \
) +   (start_t=<IDENTIFIER> "{" ( option_binding() )+ end_t="}" ) 
+  //[ start_t=<_OPTIONS> "{" ( option_binding() )+ end_t="}" ]
   {
     tn.setName("options");
     tn.setStartLocation(getLocation(start_t));
@@ -599,10 +612,20 @@
   }
 }
 
+
 void option_binding() :
 {}
 {
-  ( <IDENTIFIER> | <_LOOKAHEAD> | <_IGNORE_CASE> | "static" )
+  ( 
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("LOOKAHEAD")} ) +  identifier()     // ignore warning, \
special handling for javacc keyword +  | 
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("IGNORE_CASE")} ) +  identifier()     // ignore warning, \
special handling for javacc keyword +  | 
+  <IDENTIFIER> 
+  | 
+  "static" )
   "="
   ( IntegerLiteral() | BooleanLiteral() | StringLiteral() )
   ";"
@@ -654,10 +677,11 @@
     BlockNode bn = null;
 }
 {
-  start_t=<_JAVACODE>
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("JAVACODE")} ) +  start_t=<IDENTIFIER>
   resultType=ResultType() identifier=identifier() FormalParameters()
-  [ "throws" Name() ( "," Name() )* ]
-  [ node_descriptor() ]
+  [ LOOKAHEAD(2) "throws" Name() ( "," Name() )* ]
+  [ LOOKAHEAD(2) node_descriptor() ]
   bn=Block()
   
   {
@@ -715,7 +739,11 @@
   |
     start_t="<" <IDENTIFIER> ( "," <IDENTIFIER> )* ">"
   ]
-  kind=regexpr_kind() [ "[" <_IGNORE_CASE> "]" ] ":"
+  kind=regexpr_kind() [ "["
+                        LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("IGNORE_CASE")} ) +                        <IDENTIFIER> 
+                        "]" 
+                      ] ":"
   "{" regexpr_spec() ( "|" regexpr_spec() )* end_t="}"
   
   {
@@ -733,7 +761,8 @@
 }
 {
   //start_t=<_TOKEN_MGR_DECLS> ":" end_t=ClassBody()
-  start_t=<_TOKEN_MGR_DECLS> ":" bn=Block() 
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("TOKEN_MGR_DECLS")} ) +  start_t=<IDENTIFIER> ":" bn=Block() \
  
   {
     TigerNode tn = new TigerNode();
@@ -752,13 +781,17 @@
 }
 {
     (
-  t=<_TOKEN>
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && getToken(1).image.equals("TOKEN")} )
+  t=<IDENTIFIER>
 |
-  t=<_SPECIAL_TOKEN>
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("SPECIAL_TOKEN")} ) +  t=<IDENTIFIER>
 |
-  t=<_SKIP>
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && getToken(1).image.equals("SKIP")} )
+  t=<IDENTIFIER>
 |
-  t=<_MORE>
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && getToken(1).image.equals("MORE")} )
+  t=<IDENTIFIER>
     )
   {
     return t;
@@ -781,7 +814,8 @@
 {}
 {
   ( LOOKAHEAD(1)
-    <_LOOKAHEAD> "(" local_lookahead() ")"
+    LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("LOOKAHEAD")} ) +    <IDENTIFIER> "(" local_lookahead() ")"
   )?
   ( LOOKAHEAD(0, { notTailOfExpansionUnit() } )
     expansion_unit()
@@ -838,7 +872,8 @@
    * We give this priority over primary expressions which use LOOKAHEAD as the
    * name of its identifier.
    */
-  <_LOOKAHEAD> "(" local_lookahead() ")"
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && \
getToken(1).image.equals("LOOKAHEAD")} ) +  <IDENTIFIER> "(" local_lookahead() ")"
 |
   Block()
 |
@@ -869,7 +904,10 @@
   LOOKAHEAD(2)
   "<" identifier() ">"
 |
-  "<" "EOF" ">"
+  "<" 
+  LOOKAHEAD( {getToken(1).kind == IDENTIFIER && getToken(1).image.equals("EOF")} )
+  <IDENTIFIER> 
+  ">"
 }
 
 void complex_regular_expression_choices() :
@@ -980,6 +1018,7 @@
  
 CUNode getJavaRootNode(int tab_size) :
 {
+    mode = JAVA_MODE;
     CUNode n = null;
 }
 {



-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
jEdit-CVS mailing list
jEdit-CVS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jedit-cvs


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic