[antlr-interest] TestRig: use with package-ized lexer/parser?
Terence Parr
parrt at cs.usfca.edu
Sat Nov 17 16:07:23 PST 2012
Hi. it works for me:
$ cat foo/O.g4
grammar O;
a : ID+ ;
ID : [a-z]+ ;
WS : [ \r\t\n]+ -> skip ;
$ antlr4 -package foo foo/O.g4
$ javac -d . foo/O*.java
$ grun foo.O a -tree
x y z
(a x y z)
Ter
On Nov 12, 2012, at 5:33 PM, graham wideman wrote:
> At 11/12/2012 10:53 AM, Terence Parr wrote:
>> I assume you have tried TestRig pack.Grammar? I don't remember if I thought of this so it might not work but I can't see why not. Should be a trivial string concatenation fix. I will look at the other things as well.
>
> Well, yes, I did go down that path (so to speak) unsuccessfully, but as I now learn, I missed a trick.
>
> So, here are the details on how to exercise package-ized ANTLR grammars with TestRig as currently designed.
>
> 1. Class directory structure must correspond to package
> --------------------------------------------------------
> If the grammar (mygrammar) specifies a package (let's say com.abc.myparser), then you must arrange that the compiled class files (mygrammarLexer.class and friends) wind up in a directory tree that corresponds to the package. So something like (in NetBeans):
>
> [MyProject]/build/classes/com/abc/myparser/mygrammarLexer.class etc
>
> [see note A]
>
> 2. cd to _root_ of classes
> --------------------------
> Before running TestRig (or grun) on this from the command line, you must first cd to the _root_ of that class tree:
> [MyProject]/build/classes
>
> ... so that java runtime classloader can find the class in question from dot (cwd) using the classname com.abc.myparser.mygrammarLexer .
>
> 3. Specify grammar name qualified by package
> --------------------------------------------
> In the TestRig (or grun) command line, you have to specify the grammar name qualified by the package name, for example:
>
> grun com.abc.myparser.mygrammar startelement -gui otherargs
>
> [See note B]
>
> Other notes:
> ------------
> A) This probably requires that, upstream, you have ANTLR generate the java source files in a similarly appropriate source directory structure -- ANTLR itself doesn't create or require package-coordinated directories when generating the lexer/parser code. While ANTLR and javac can be used with simple commands assuming default package, once non-default packages become involved one probably needs a build system or IDE to automate the coordination of packages and directories.
>
> B) Of course, since you have to set the cwd to the classes root for TestRig's benefit, you probably have to adjust the argument that specifies the location of input files.
>
> C) An IDE issue: When working on a custom version of TestRig in NetBeans, and attempting to run or debug it from the IDE, I still haven't found a good way to add "current dir" to the runtime classpath. You can add an explicit dir to the Libraries list, but that's a poor substitute, so not a final answer, IMO. (This is only an issue if you're trying to work on TestRig with its dynamic class loading, not a general problem with ANTLR and packages.)
>
> Hope that helps others.
>
> -- Graham
>
>
>
>
>
>
More information about the antlr-interest
mailing list