JastAdd2 was developed at Lund University by Torbjörn Ekman, Görel Hedin, and Eva Magnusson. JastAdd2 has recieved additional contributions from Emma Söderberg, Jesper Öqvist and Niklas Fors.
For additional contributors, see the change logs.
Copyright (c) 2005-2013, The JastAdd Team. All rights reserved.
JastAdd2 is is covered by the modified BSD License. For the full license text see the LICENSE file.
The latest version of JastAdd2 can be found at http://jastadd2.org
JastAdd2 requires a Java runtime environment to run, and a JDK to build. JastAdd2 uses JavaCC, JJTree, and Apache Ant. JavaCC and JJTree are included in the source tree of JastAdd2, so the only external tools needed are Java and Ant.
Builds are done by using the Apache Ant script build.xml:
Ordinary build (generate and compile):
Create a new jar file (jastadd2.jar)
> ant jar
Create a new source zip file (jastadd2-src.zip)
> ant source-zip
Create a zip file containing the main jar plus release notes and reference manual (jastadd2-bin.zip)
> ant bin-zip
Make a new release (builds the source zip and binary zip):
> ant release
Delete generated files
> ant clean
Bootstrap jastadd2 (replace the jastadd2.jar used to build jastadd2). For stability, bootstrap is done seldom and only with extra testing.
> ant bootstrap
- Make sure the following files have appropriate content:
- ChangeLog (Check against commit log, add note about the release)
- doc/release-notes.html (Add suitable high-level content for this release)
- Create a new jar file:
> ant jar
- Run all test cases.
- Run the release script which will show you commands for doing the release.
> ./release.shThis will involve:
- Creating a new tagged version R20110506 (or other appropriate date)
- Patching html files with version R20110506
- Creating a zip file jastadd2-src.zip for the source distribution
- Creating a zip file jastadd2-bin.zip for the binary distribution.
- Upload the zip files and appropriate documentation to jastadd.org
- Cleaning up
- Browse to jastadd.org/releases/jastadd2/R20110506 and check the content.
- Ant clean and commit
- Tag the current version according to ./release.sh instructions.
- Update the web pages to reflect the new release on the download and news pages.
- Check out the web pages at http://svn.cs.lth.se/svn/jastadd-research/web
- Update index-file.html with news item about the new release
- Update download.html to link to the new release
- Update documentation/reference_manual.php to link to latest reference manual
- Commit the web pages
./publish(to check out the newest web on the real web site)
Special tools used (jars included in the tools-dir):
- JastAdd2: The semantics are defined using JastAdd itself.
- JJTree: Builds the AST used by JavaCC
- JavaCC: For parsing aspect source files
General tools used (assumed to be available on your platform):
- JVM: A Java Virtual Machine
- Ant: Building JastAdd2
.astJastAdd abstract syntax tree files
.jragJastAdd semantics files. Usually declarative.
.jaddJastAdd semantics files. Usually imperative.
.javaRegular Java sources
.jjtJavaCC files, using the JJTree AST-building commands.
src/javaJava source files
JastAdd.javaThe main class. Compiles the .ast and .jrag files to Java files.
JastAdd.jragExtends the top AST node (Grammar) with methods for adding .ast and .jrag info.
CommandLineArguments.javaA general class for reading in args and options from the command line.
JastAddTask.javaImplements an ANT task for running jastadd, including support for various args and options.
src/jastadd/JastAdd aspect and AST specifications
src/res/Templates, property files and other resources that are included in the JastAdd jar file.
src/gen/Generated source files
docDocumentation html files.
reference-manual.htmlThe reference manual
release-notes.htmlThe release nodes
index.htmlFor download from the web
*.phpHelper files for browsing uploaded files on the web
tools3rd party jar files used to build build JastAdd
LICENSEText file with the jastadd LICENSE.
release.shA script printing the commands for doing a release.
ChangeLogA textfile recording changes done to JastAdd, intended for users of JastAdd (focusing on external behavior).
ChangeLogUntil2010.txtA textfile containing cvs log messages until 2010 when the system was moved to svn.
Understanding the Implementation
Overall behavior when running JastAdd:
- First, options are read and global flags are set.
- Then, an incomplete AST is built by parsing the .ast file.
- Then, the .jrag files are parsed, and their information is weaved into the AST.
- Now, the AST is complete, and attributes can be accessed.
- Then, possible errors are printed.
- Then, target AST classes are generated.
To keep track of JastAdd versions, the version number (based on the current date) is patched into both the source file JastAdd.java, and the manifest file. The script doing this, newrelease, is called when building.
JavaCC and its tree-building extension, JJTree, are used for parsing. They assume top classes called Node and SimpleNode. Normally, JJTree generates its own AST node subclasses, but we "fool" it to use the AST classes generated by JastAdd instead (by generating them before we run JavaCC/JJTree).
However, we let JJTree generate the AST classes for the Java code used inside equations in .jrag files. This is because these expressions are not analyzed by JastAdd. They are just unparsed at appropriate places in the generated Java code.