Home | Download | ANTLRWorks | Wiki | About ANTLR | Feedback | Support | Bugs | v2


Latest version is 3.0.1
Download now! »

Download
» Home
» Download
» ANTLRWorks
» News
»Using ANTLR
» Documentation
» FAQ
» Articles
» Grammars
» File Sharing
» Runtime API
» Tech Support
» Bug Tracking
»About ANTLR
» What is ANTLR
» Why use ANTLR
» Showcase
» Testimonials
» Getting Started
» Software License
» ANTLR WebLogs
» ANTLR Workshops
»StringTemplate
»ANTLR v2
»Feedback
»Credits
»Contact


Support StringTemplate, ANTLR Project by making a donation! Terence often pays for things like the antlr.org server, conference travel, and this site design (that alone cost US$1000). Buy him a beer and pizza remotely ;)

Search





I've been trying to get ANTLR 2.7.4 to run under Cygwin with GCJ. After trying to piece information together, I've finally found a recipe that makes it work.

ANTLR comes with a standard ./configure script. Under Cygwin, it executes fine, but during compilation, there is an error related to AWT in directory base/antlr/debug/misc. AWT seems to be a JAVA standard library.

A previous article shows how to work around the error, but it didnýt solve everything for me: I was able to create a libantlr.so file (see step 4 of that page), but step 5 broke down, probably because some things in my path weren't set correctly (I think). Step 5 relies on a file called antlr/Tool.class, which doesn't exist in the ./antlr directory but in the antlr.jar file instead (a jar file is a tar-like library in which .class files can be gathered.) In the end, I got it to work by un-jarring all the files and simply bypassing the creation of a shared library.

Here's what I did: (basedir is the directory where you can find ./configure)

  1. Install gcj (through the setup.exe on cygwin.com)
  2. Download the tar files of the latest version of ANTLR (2.7.4 in my case) and untar it in a local directory.
  3. Run ./configure --prefix=install dir. While we do not need to configure to compile the antlr executable, we do need it to compile the support C++ libraries. Do NOT run make after configure!
  4. Delete AWT dependent code: cd basedir/antlr/debug rm -fr misc
  5. cd basedir
  6. Un-jar all the files in the antlr.jar, back into their original position. jar xfv antlr.jar
  7. Compile everything into an executable gcj --main=antlr.Tool `find antlr -name "*.class"` -o cantlr If all is well, you will see a bunch of warnings on your screen that, I assume, you can safely ignore. The end result is a file called cantlr.exe).
  8. Test the executable by running it (./cantlr). You should see a bunch of lines with program information.
  9. Move this file to a place somewhere in your path (e.g. /usr/local/bin)
At this point, we have created that main executable that will convert a .g grammar file into a set of Java, C# or C++ files. These newly generated files, however, rely on base classes that are also part of the ANTLR distribution. For C++, we need to build a library that contains the compiled based classes.
  1. cd basedir/lib/cpp
  2. Build the C++ library. This step won't work if you previously didn't run ./configure. make
  3. If everything went fine, then the ./src directory will contain a file called libantlr.a. Now install the library and include files to the place that was originally indicated during the ./configure step. make install
The next step is to test if now have a fully working system.
  1. cd basedir/examples/cpp/calc
  2. The standard Makefile will not know where to find the antlr executable. As a work around, just generate all files by manually invoking antlr. cantlr calc.g A set of C++ files will now be generated.
  3. make
  4. If everything went fine, you will now see a fresh set of executables!
This is how I got the system work for me while using GCJ and Cygwin. I'm pretty sure that the same procedure will also work in a Solaris or Linux environment...

Tom Verbeure