On May 20, 2009, at 7:04 AM, Mauricio Pazos wrote:
> Hi list, I would like to use the NODE_FACTORY to produce an custom
> Node
> implementation (and avoid the SimpleNode).
> I set the following relevant option:
>
> BUILD_NODE_FILES=false; // to avoid the Simple nodo generation
> NODE_FACTORY="org.myproy.util.MyNodeFactory";
>
> but the generated parser still use
>
> SimpleNode jjtn001 = new SimpleNode(...);
>
> How can I instruct javacc to generate
>
> SimpleNode jjtn001 = org.myproy.util.MyNodeFactory.jjtCreate(int id);
Hi Mauricio -
Hm, when I run this with JavaCC 4.2 it seems to be using the specified
NODE_FACTORY class, e.g.:
============
$ cat foo.jjt
options {
BUILD_NODE_FILES=false;
NODE_FACTORY="org.myproy.util.MyNodeFactory";
}
PARSER_BEGIN(Foo)
public class Foo {}
PARSER_END(Foo)
TOKEN : {
<HI : "hello">
}
void Hi() : {} {
<HI>
}
$ /usr/local/javacc-4.2/bin/jjtree foo.jjt && /usr/local/javacc-4.2/
bin/javacc foo.jj
Java Compiler Compiler Version 4.2 (Tree Builder)
(type "jjtree" with no arguments for help)
Reading from file foo.jjt . . .
File "Node.java" does not exist. Will create one.
File "FooTreeConstants.java" does not exist. Will create one.
File "JJTFooState.java" does not exist. Will create one.
Annotated grammar generated successfully in ./foo.jj
Java Compiler Compiler Version 4.2 (Parser Generator)
(type "javacc" with no arguments for help)
Reading from file foo.jj . . .
File "TokenMgrError.java" does not exist. Will create one.
File "ParseException.java" does not exist. Will create one.
File "Token.java" does not exist. Will create one.
File "SimpleCharStream.java" does not exist. Will create one.
Parser generated successfully.
$ grep myproy *.java
Foo.java: SimpleNode jjtn000 =
(SimpleNode)org.myproy.util.MyNodeFactory.jjtCreate(JJTHI);
Node.java:/*
JavaCCOptions:MULTI
=
false
,NODE_USES_PARSER
=
false
,VISITOR
=
false
,TRACK_TOKENS
=
false
,NODE_PREFIX
=
AST
,NODE_EXTENDS
=
,NODE_FACTORY
=org.myproy.util.MyNodeFactory,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
==============
Note the next to last line in the output there... that's the factory
invocation. What version of JavaCC are you using? Or does this code
not represent your situation?
Yours,
Tom
http://generatingparserswithjavacc.com/---------------------------------------------------------------------
To unsubscribe, e-mail:
users-unsubscribe@...
For additional commands, e-mail:
users-help@...