[antlr-interest] TestRig: use with package-ized lexer/parser?

Terence Parr parrt at cs.usfca.edu
Sat Nov 17 15:59:33 PST 2012


Hi. A couple of thoughts:

1. It standard practice to put "." first in the class path.
2. java -jar limits the path to only those things inside the jar I think.
3. It should be clear that antlr's jar must be in the CLASSPATH to pick up TestRig

I'll lookat TestRig and packages.

Ter
On Nov 12, 2012, at 3:43 AM, Graham Wideman wrote:

> Hi Terr and all,
> 
> Update:
> 
> I've solved half of the puzzle of TestRig's dynamic class loading, but I'm still interested in whether there's already an intended way to use TestRig with a grammar that specifies a package.
> 
> The part I solved is how TestRig manages to find default-package lexer and parser class files under normal conditions. The short version is that TestRig relies on there being a "dot" (current dir) in the CLASSPATH environment variable. But there are a number of correlated details/pitfalls.
> 
> The keys are:
> 
> 1) The user must invoke TestRig (runs grun shell/batch file) from the directory containing the lexer and parser class files, in such a way that TestRig (or my version TestRig2) sees that dir as the working dir. The subtle issue here is...
> 
> 2) TestRig's own jar file must be in the CLASSPATH, so that it can be invoked with a reference to the class to run:
>   java org.antlr.v4.runtime.misc.TestRig %*
> and NOT with the -jar option like this (with runnable class in the manifest):
>   java -jar "path-to-jarfile\TestRig2.jar"   %*
> ... as this latter apparently changes the working directory.
> 
> 3) The current working dir (".") must be included in the CLASSPATH (environment variable) that TestRig sees. (Note: the class loader for files does not treat the current working directory as an assumed place to look for classes. It only looks in cwd if there's a dot in CLASSPATH).
> 
> The appropriate CLASSPATH (including TestRig and dot can be set up in grun shell/batch file). However...
> 
> 4) When debugging in NetBeans, I didn't find a way to set the debug/run CLASSPATH to include the current working dir (though there is a setting for current working dir itself).  One work-around is to add the desired directory (the one containing the lexer and parser class) as a "Library" in Netbeans.  Unfortunately there doesn't seem to be a way to set "." as a Library.
> 
> 5) It's perhaps obvious, but the package name for a custom version of TestRig is not salient to finding the lexer/parser classes (though of course invocation of custom TestRig does have to refer to the custom package name).
> 
> (And by way of leaving clues: I wanted to look at the ClassLoader search algorithm, but the JRE 7 source from Oracle manages to omit crucial sun.misc.URLClassPath. However, more-comprehensive source is available here: http://jdk7src.sourceforge.net/)
> 
> ------
> 
> OK, so now I can build and debug my own version of TestRig, and unless someone has an alternative bright idea, I hope to explore adding a command-line option to specify a package name for the grammar.
> 
> -- Graham 
> 
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address



More information about the antlr-interest mailing list