Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing ANTLR Grammar

So I've been making a grammar in Eclipse with ANTLR v3.4 and I've made one that works and I want to make sure when I edit it everything still works. I can go into the interpretter everytime but that seems like a huge waste of time.

Questions: I've read about gunit but the link it gives to download gUnit: ( http://antlr.org/hudson/job/gUnit/org.antlr$gunit/lastSuccessfulBuild/ ) doesn't work. How can I get gUnit. What is the best way to test grammars? Is it actually gUnit or should I just do java tests like jUnit tests?

like image 583
Jono Avatar asked May 31 '12 17:05

Jono


3 Answers

The question is old, but I'm leaving a reference for completeness:

For me, the gUnit was useless. So I managed to find how test only the Lexer and then, only the parser.

I answered it here: https://stackoverflow.com/a/53884851/976948

Basically, there are links for 2 articles about how to test it:

  • Unit test for Lexer
  • Unit test for Parser
like image 165
RicardoS Avatar answered Sep 24 '22 07:09

RicardoS


I recently completed two ANTLR3 assignments (I'm working on my Master's in Computer Science) using Eclipse. I found no single document that had a process for installing, configuring, writing, and debugging a grammar in Eclipse. So, after working through various issues, I found the easiest thing to do was to stay in Eclipse for testing.

To use the process I have come to use (outlined below) you must first have the ANTLR IDE v2.1.2 installed. Add it right from inside Eclipse Indigo: http://antlrv3ide.sourceforge.net/updates. This site also has some useful doc on using the ANTLR IDE. Once installed, the IDE has to be configured. Video tutorials are a bit out of date but helpful. See a detailed how to guide on configuring ANTLR IDE in Eclipse. The main configuration item is the java output folder. Do this in Eclipse by going to Windows, Preferences, ANTLR, Code Generator, check Project relative folder and in the Output folder name box type a folder name (mine is called "antlr-java", others use "generated").

Test/Debug Process for ANTLR in Eclipse Indigo with ANTLR IDE

  1. After a new project is created, right-click it, select Configure, Convert to ANTLR Project...
  2. Create the grammar in a .g file and save it. Note: filename has to match grammar name.
  3. If there are significant errors, debug the grammar. Eclipse shows the ANTLR error(s) and what line(s) are affected. At first, these errors seem hard to understand but they can be worked through by using various resources: - The Definitive ANTLR Reference by Terence Parr the guy who wrote ANTLR - the ANTLR Reference Manual - google the error; many times you will end up here at stackoverflow; in particular, Bart Kiers is both knowledgeable and helpful (Bart: thx for the help you didn't know you gave me)
  4. On the first save after the serious ANTLR errors are resolved, the java output folder you configured in Eclipse will be created and a java file in that folder will also be created.
  5. Right-click on the java output folder, select Build Path, Use As a Source Folder. This tells Eclipse where to look for the project's java source.
  6. There are likely to be errors in the new java file. Select it, then search through looking for java errors. Go back to your grammar or java file(s), correct the errors, and re-save the grammar until both grammar and java files are error free, then run it.
  7. From this point on, it's the usual modify-run-debug cycle.
  8. The only other Eclipse change I needed was to create a few Run Configurations for testing command line parameters.
like image 31
cb4 Avatar answered Sep 22 '22 07:09

cb4


You can download gUnit there but I think there is no latest version...

Try Jarvana... Latest version there is 3.4: http://repo1.maven.org/maven2/org/antlr/gunit/3.4/gunit-3.4.jar

@Dave Newton is right. As of ANTLR v3.1, gUnit is included in the main ANTLR Tool jar as is stated there.


I didn't know for gUnit till now. It looks great for grammar testing, but I think that JUnit tests will do their job to...

like image 44
PrimosK Avatar answered Sep 20 '22 07:09

PrimosK