Java(TM) Compiler Compiler(TM)

The README File for JJTreeExamples



JJTreeExamples



This directory contains some simple JJTree input files intended to

illustrate some of the basic ideas.  All of them are based on an

grammar to recognize arithmetic expressions built out of identifiers

and constants.



eg1.jjt



This example is just the JavaCC grammar, with a little extra code in

the parser's main method to call the dump method on the generated

tree.  It illustrates how the default behavior of JJTree will produce

a tree of non-terminals.



eg2.jjt



This example is the same grammar as eg1.jjt with modifications to

customize the generated tree.  It illustrates how unnecessary

intermediate nodes can be suppressed, and how actions in the grammar

can attach extra information to the nodes.



eg3.jjt



This example is a modification of eg2.jjt with the NODE_DEFAULT_VOID

option set.  This instructs JJTree to treat all undecorated

non-terminals as if they were decorated as #void. The default JJTree

behavior is to treat such non-terminals as if they were decorated

with the name of the non-terminal.





Here are some instructions on how to run the examples and the output

you can expect to see.



eg1.jjt

-------



The only bit of JJTree-specific code is an action in the start

production that dumps the constructed parse tree when the parse is

complete.  It uses JJTree simple mode.



The input file is eg1.jjt.



    adl% Java Compiler Compiler Version 0.6(Beta2) (Tree Builder Version 0.2.3)

    Copyright (c) 1996, 1997 Sun Microsystems Inc.

    (type "jjtree" with no arguments for help)

    Reading from file eg1.jjt . . .

    File "Node.java" does not exist.  Will create one.

    File "SimpleNode.java" does not exist.  Will create one.

    Annotated grammar generated successfully in eg1.jj



JJTree has now generated the JavaCC parser source, as well as Java

source for the parse tree node building classes.  Running JavaCC in

the normal way generates the remaining Java code.



    adl% javacc eg1.jj

    Java Compiler Compiler Version 0.6(Beta2) (Parser Generator)

    Copyright (c) 1996, 1997 Sun Microsystems Inc.

    (type "javacc" with no arguments for help)

    Reading from file eg1.jj . . .

    File "ParseError.java" does not exist.  Will create one.

    File "Token.java" does not exist.  Will create one.

    File "ASCII_CharStream.java" does not exist.  Will create one.

    Parser generated successfully.



Compile and run the Java as usual.  The expression is read from the

standard input, and is terminated by an end of file character.



    adl% javac eg1.java

    adl% java eg1

    Reading from standard input...

    (a + b) * (c + 1)

    Start

     Expression

      AdditiveExpression

       MultiplicativeExpression

	UnaryExpression

	 Expression

	  AdditiveExpression

	   MultiplicativeExpression

	    UnaryExpression

	     Identifier

	   MultiplicativeExpression

	    UnaryExpression

	     Identifier

	UnaryExpression

	 Expression

	  AdditiveExpression

	   MultiplicativeExpression

	    UnaryExpression

	     Identifier

	   MultiplicativeExpression

	    UnaryExpression

	     Integer

    Thank you.



eg2.jjt

-------



This is a modification of the first example to illustrate how the

parse tree can be customized:



    adl% jjtree eg2.jjt

    Java Compiler Compiler Version 0.6(Beta2) (Tree Builder Version 0.2.3)

    Copyright (c) 1996, 1997 Sun Microsystems Inc.

    (type "jjtree" with no arguments for help)

    Reading from file eg2.jjt . . .

    File "Node.java" does not exist.  Will create one.

    File "ASTStart.java" does not exist.  Will create one.

    File "SimpleNode.java" does not exist.  Will create one.

    File "ASTAdd.java" does not exist.  Will create one.

    File "ASTMult.java" does not exist.  Will create one.

    File "ASTInteger.java" does not exist.  Will create one.

    Annotated grammar generated successfully in eg2.jj

    adl% javacc eg2.jj

    Java Compiler Compiler Version 0.6(Beta2) (Parser Generator)

    Copyright (c) 1996, 1997 Sun Microsystems Inc.

    (type "javacc" with no arguments for help)

    Reading from file eg2.jj . . .

    File "ParseError.java" does not exist.  Will create one.

    File "Token.java" does not exist.  Will create one.

    File "ASCII_CharStream.java" does not exist.  Will create one.

    Parser generated successfully.

    adl% javac eg2.java

    adl% java eg2

    Reading from standard input...

    (a + b) * (c + 1)

    Start

     Mult

      Add

       MyID: a

       MyID: b

      Add

       MyID: c

       Integer

    Thank you.



Look at eg2.jjt to see how node annotations can be used to restructure

the parse tree, and at ASTMyID.java to see how you can write your own

node classes that maintain more information from the input stream.


JavaCC Home | SunTest Home | Download | Testimonials | Documentation | FAQ | Support | Contact Us