-
Notifications
You must be signed in to change notification settings - Fork 1
ARCHIVE - Yes! An Object-oriented Compiler Compiler (Targets ISE Eiffel 3.2.8 under Unix -- with included EiffelParse patch)
License
eiffelhub/yoocc
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
YOOCC - Yes! An Object-oriented Compiler Compiler.
--------------------------------------------------
Authors: Jon Avotins and Glenn Maughan
Date: $Date: 1995/05/08 16:16:06 $
Contents.
---------
0. Introduction
1. Terms and Conditions
2. Installation
2.1 Extraction
2.2 Compilation
2.3 Platforms
3. Use
3.1 Developing a Parser
3.2 Debugging Enhancements
4. Performance
5. The Future
6. Acknowledgment Form
7. Bug Report Form
0. Introduction
---------------
YOOCC provides a Compiler Compiler written entirely in Eiffel that
utilises an extended parse library which evolved from the ISE EiffelParse
library. YOOCC presents the programmer with a tool for automatically
generating a processor framework (Eiffel source code) from a grammar.
The approach reconciles object-oriented principles, processor generation,
and an object-oriented language (Eiffel).
1. Terms and Conditions
-----------------------
Copyright (C) 1995
Monash University, Department of Software Development, Australia
YOOCC GENERAL PUBLIC LICENSE
It is permitted to copy and distribute verbatim copies of this
license, but altering it is not allowed.
The following terms describe the limitations on copying, distributing,
using, or altering YOOCC software and those classes and files which
are protected by this license.
1. You may copy and distribute verbatim copies of YOOCC source classes
and files and the executable YOOCC as received and generated from the
distribution, in any medium, provided that you conspicuously and
appropriately publish on each copy a valid copyright notice of the
form "Copyright (C) Monash University 1995" with the appropriate year;
keep intact the notices on all files that refer to this License
Agreement and the absence of any warranty and the list of original
authors of each class; and give any other recipients of any protected
YOOCC source classes, files and executable a copy of this License
Agreement along with the program.
2. You may modify your copy or copies of YOOCC library source classes
or any portion of it, and copy and distribute such modifications under
the terms of Paragraph 1 above, provided that you also cause the
modified files to carry prominent notices stating that you changed the
files and the date of any change. If program binaries are distributed
or sold which are based in part on modified classes, then such
modified classes must be made freely available in source code form.
No restriction is placed on any new classes which may be written and
used in conjunction with YOOCC library classes, though authors are
encouraged to make them also available under the terms of this
license.
3. You may use the YOOCC source classes, files and executable in any
program for any purposes provided that you:
a) Include in any documentation describing the program the notice:
"This program is based in part on YOOCC (Yes! An OO Compiler
Compiler) written by Jon Avotins and Glenn Maughan and associated
source classes and files, which is distributed free of charge by
Monash University, Software Development Department, 900 Danenong
Road, Caulfield East, Victoria 3145 Australia, which may be
obtained by anonymous ftp from the WWW site
"http://insect.sd.monash.edu.au/~yoocc/""
b) Include in any documentation describing YOOCC a list of names
acknowledging the original authors of YOOCC.
c) Acknowledge the use of YOOCC and YOOCC library classes in any
description of the program including commercial advertising or
articles in scientific journals, or any other publications.
4. You may not copy, sublicense, distribute or transfer protected
YOOCC library classes except as expressly provided under this License
Agreement. Any attempt otherwise to copy, sublicense, distribute or
transfer YOOCC classes and executable, is void and your rights to them
under this License agreement shall be automatically terminated.
However, parties who have received computer software programs from you
with this License Agreement will not have their licenses terminated so
long as such parties remain in full compliance.
NO WARRANTY
BECAUSE THE YOOCC LIBRARIES AND EXECUTABLE COVERED BY THIS LICENSE
ARE LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO WARRANTY, TO
THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
STATED IN WRITING, MONASH UNIVERSITY AND/OR OTHER PARTIES PROVIDE
YOOCC, AND THE YOOCC LIBRARIES "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE LIBRARY
CLASSES PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
SERVICING, REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL MONASH
UNIVERSITY AND/OR ANY OTHER PARTY WHO MAY MODIFY AND REDISTRIBUTE
YOOCC AND THE YOOCC CLASSES AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA
OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD
PARTIES OR A FAILURE OF THE LIBRARIES TO OPERATE WITH PROGRAMS NOT
DISTRIBUTED BY MONASH UNIVERSITY) THE PROGRAM, EVEN IF YOU HAVE
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM
BY ANY OTHER PARTY.
2. Installation
---------------
2.1 Extraction
--------------
YOOCC is distributed in source form. To extract the source untar the
distribution file into a directory, such as ~/Development. Eg:
mkdir Development
cd Development
If using gnu tar:
tar foxz yoocc.tar.Z
or with standard tar:
uncompress yoocc.tar.Z
tar fox yoocc.tar
The distribution will create a number of directories:
YOOCC -- the source code for YOOCC.
YOOCC/extended_parse -- a version of EiffelParse with a number of
extensions.
YOOCC/patterns -- containing a pattern for displaying
recursively indented information.
The "extended_parse" library is essential. YOOCC will not compile
and run correctly with the standard ISE Parse library. A number of
enhancements have been made to the ISE Parse library and stored in
a patch file entitled "extended_parse_patch".
In order to reproduce our extended parse library, the following steps
need to be made:
In order to keep the original ISE Parse library intact you should apply the patch
to a local copy of the ISE Eiffel Parse library. To do this, execute the following
commands:
cd YOOCC/extended_parse
cp $EIFFEL3/library/parse/*.e .
o Apply the patch to the ISE parse library using the following command:
cd YOOCC/extended_parse
patch < extended_parse_patch
o Remove all redundant files with an extension of ".orig".
NB. After application of the patch, if there are any files with a
".rej" extension, then the patch has failed. You may need to
apply manual patches using the "extended_parse_patch" file.
2.2 Compilation
---------------
To compile the system you need Eiffel installed (of course). The
source has been developed with ISE Eiffel version 3.2.8 It should
compile without problems on this version and any later versions.
Compilation depends on the setup of your Eiffel installation.
Typically you will have the base libraries precompiled. We also
precompile the base libraries with the lex libraries. However, this
is for convenience only --- it saves on freezing.
Check the Ace file in the directory: Yoocc. Make sure it specifies
the correct precompilation option according to your setup.
It should read either:
precompile ("$EIFFEL3/precomp/spec/$PLATFORM/base")
or
precompile ("$EIFFEL3/precomp/spec/$PLATFORM/baselex")
if you have base + lex precompiled in the directory baselex. You may
also change this to mvision to use the precompiled base + vision
libraries. You get the idea...
The Ace files have been written with the assumption that the
environment variable YOOCC is set to the directory you extracted the
source into.
Set this with either:
setenv YOOCC ~/Development
for csh/tcsh shells or
YOOCC="~/Development"
export YOOCC
for sh/bash shells.
Compile the source as normal using either ebench or es3. The
compilation process may need to freeze depending on your
precompilation options.
2.3 Platforms
-------------
YOOCC has been compiled successfully on Solaris, Ultrix and Linux
platforms. It is written entirely in Eiffel therefore is should run
on all supported platforms. With one (possible) exception: MS-Windows.
Currently YOOCC hasn't been compiled on an MS-Windows platform. It
probably won't run on this platform because of the use of "long"
filenames. But we are yet to test it...
3. Use
------
The best description of how to use YOOCC can be found in the paper:
YOOCC: Yes! An Object-oriented Compiler Compiler
Jon Avotins, Christine Mingins and Heinz Schmidt
Available in either the:
Proceedings of TOOLS USA '95, Santa Barbara,
Prentice Hall 1995
or:
Technical Report.
Department of Software Development.
Monash University.
<http://insect.sd.monash.edu.au:/>
This section describes the quick way to get started. You should refer
to the paper for more detail.
3.1 YOOCC Command Parameters
----------------------------
YOOCC (Version 1.0). (C) Jon Avotins and Glenn Maughan 1995.
Monash University.
SYNOPSIS
yoocc -p<file> -g<file> [-d<directory>] [-k] [-t]
OPTIONS
The following options apply to yoocc:
-p Processor name.
-g Grammar file to parse.
-d Destination directory for generated processor.
-k Case sensitive keywords in lexical analyzer.
-t Case sensitive tools in lexical analyzer.
NOTE: If the destination directory is not supplied, the processor will
be generated in the current working directory.
3.2 Developing a Parser
-----------------------
The following steps are required to generate a parser with YOOCC:
1. Define the processor grammar.
2. Run YOOCC on the grammar to generate classes for
constructs and syntax. Also to generate skeleton classes for
the lexical analyzer and the parser root class.
3. Complete the coding of the lexical analyzer. This involves
defining token types for any tokens required in the parser.
4. Define semantic actions for interesting constructs.
5. Compile and test the parser.
There are also some other minor activities required which
include environment variable setting, copy files from one
directory to another and possibly modifying the Ace file
to take into consideration local libraries. These are
presented to the processor generator after Step 2 directly
above has completed.
3.3 Debugging Enhancements
--------------------------
A debug switch can be turned on to help debugging a parser once it has
been compiled. The switch will display the parsing process as it
occurs. To turn on this switch add (or uncomment) the following line
in YOOCC's Ace file:
debug ("parse")
Also you can display the parse tree once parsing has been completed
successfully. Add the following code to your parser:
if root_line.parsed then
root_line.display (io.output)
end
This will display the parse tree to stdout. If you want to store the
parse tree in a file replace io.output with a file object:
!! file.make_open_read ("my_tree")
if root_line.parsed then
root_line.display (file)
end
4. Performance
--------------
YOOCC will perform at its best if you finalise the system. When you
finalise make sure you comment out any precompile option's and debug
options in the Ace file. Also delete the EIFGEN directory before
compiling to make sure finalisation is as optimal as possible.
The performance of your generated parsers will vary greatly depending
on the number and complexity of your constructs. However, it is
recommended to use the INPUT class from the Extended_parse cluster as
it contains a number of enhancements that may or may not be
incorporated into your current ISE library versions.
5. The Future
-------------
This is the first release of YOOCC. As such it provides a very
useful tool for automatically generating parsing classes. However,
it does need more work and features to become a fully functioning
compiler compiler.
The enhancements that we (currently) envisage include:
o The ability to add semantic information to the grammar and
therefore to the constructs automatically.
o Front end for YOOCC, either a cleaner textual one or GUI.
o Extending the EiffelParse libraries to cater for LALR(1)
grammars instead of just LL(1).
o The Eiffel lexical library 3.2.8 had a bug in it which
did not allow the lexical analyzer to be stored and retrieved.
Hence why "store_analyzer (analyzer_file_name)" has been
commented out of the root class for both the processors
generated by YOOCC, and YOOCC itself. When this bug is
fixed, just decomment this line to enhance execution
efficiency.
o others as mentioned in the YOOCC TOOLS paper.
Of course we have only limited time on our hands. So we are asking
for your help. Any contributions, ideas, bug fixes etc., that you may
have are more than welcome. We can work towards developing a well
rounded and useful tool. If you extend YOOCC for your own uses please
let us know.
6. Acknowledgment
----------------
Mail to yoocc@insect.sd.monash.edu.au
--------------------------------------------------------------
Name:
Email:
I used YOOCC for:
I thought YOOCC was:
useful / not useful
For the following reasons:
---------------------------------------------------------------
7. Bug/Enhancement Report
-------------------------
Mail to yoocc@insect.sd.monash.edu.au
---------------------------------------------------------------
Name:
Email:
Platform:
Version of YOOCC:
Description of problem:
Example code:
Suggested fix:
----------------------------------------------------------------
About
ARCHIVE - Yes! An Object-oriented Compiler Compiler (Targets ISE Eiffel 3.2.8 under Unix -- with included EiffelParse patch)