[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