"Linux Gazette...making Linux just a little more fun!"

Compiler Construction Tools

By Richard A. Sevenich

Part II: Installing JFlex and CUP - Specific Instructions

by Richard A. Sevenich, Department of Computer Science
April 26, 1999

This is the second of a series whose first article appeared in the April, 1999 issue of Linux Gazette. [see:  Compiler Construction Tools, Part I ]. The traditional example, the calculator, is provided in Part III, which is intended as a companion to this part and also appears in this issue.

0.0 Background

The JFlex and CUP software packages come with installation instructions. These are well written and straightforward. Nevertheless this document was written to give a very specific installation scenario. In the author's experience, this specificity can be useful to certain new users who find the generality and flexibility of less specific installation instructions somewhat difficult upon first exposure. The downside is that this specificity takes away flexibility.

These instructions are intended for use with a Linux box, with bash as the default shell and with the tcsh also installed, but not as default. It is assumed that the user has a version of jdk (Java Development Kit), or some equivalent, installed already. If not, you can find such at www.blackdown.org/.    In the system used by the author, the compressed tarball of jdk1.1.5-v5-glibc.tar.gz from blackdown was downloaded into /usr/lib and exploded there.

The author would appreciate corrections and constructive suggestions. He can be contacted at:  rsevenich@ewu.edu

1.0 System Preparation

Note that the specific choices made in this section are arbitrary. For starters, it is assumed that you have logged into your home directory, say, /home/jsmith. All paths will be relative to that position within the file hierarchy. Make new directories as follows:

> mkdir javatools
> mkdir javatools/CUP

Next revise your .bash_profile and .bashrc files to have the needed java CLASSPATH etc. Here are some example lines:


Note: The directory /usr/lib/jdk1.1 is meant to denote the site of the java files exploded from the blackdown tarball. In the author's case it was a symbolic link to /usr/lib/jdk1.1.5v5-980311/.

For these changes to take effect you must log out and log back in.

2.0 JFlex

2.1 Obtaining JFlex

JFlex is available from  www.informatik.tu-muenchen.de/~kleing/jflex/index.html#Download
in a tar.gz format. At this writing the file name was 'jflex-1.2.tar.gz'. This tarball includes an extensive manual with its own installation instructions.

2.2 A Specific Installation Scenario

This will create the directory 'JFlex' with associated subdirectory hierarchy. It should contain everyting needed, including documentation in the 'doc' subdirectory. The manual found there is comprehensive and indicates how JFlex can be used to produce stand alone lexical analyzers (as in the example in section 2.3, below) or lexical analyzers to be used with parsers produced by other utilities, such as CUP. In directory JFlex/bin you will find the shell script 'jflex' which should be modified as follows:

2.3 Testing the Installation

          Hello someone !

          This is a sample input file for the
          standalone example scanner.

           Have a nice day!

3.0 CUP

3.1 Obtaining CUP

CUP is available from www.cs.princeton.edu/~appel/modern/java/.  There you'll find the needed source code (compressed tarball) and a user manual. The manual can be downloaded in html to provide an on-line manual or in a form (e.g. postscript) suitable for printing. The next section deals with downloading the source file.
Note: The above website also contains an alternative to JFlex, called JLex.

3.2 A Specific Installation Scenario for CUP with test

This should result in activity ending with a success message, e.g. 'Install and test was successful'.

4.0 What Next?

The manuals downloaded with JFlex and CUP provide enough information so that users can get up and running.

Previous ``Compiler Construction Tools'' Columns

Compiler Construction Tools Part I, April 1998

Copyright © 1999, Richard A. Sevenich
Published in Issue 41 of Linux Gazette, May 1999