Rel359 is based on Rel, however there
is no published developer documentation for Rel, so this page gives a very brief overview of how
a few parts of Rel359 are actually implemented. In developing Rel359 I did not need to change
every part of Rel and so I didn't need to work out how it all worked!
Many of these comments will also apply to Rel because the differences between Rel and Rel359 are
actually very small.
Rel359 was written in Java 1.6 using Eclipse 3.4 and the full
source code is included in the install for Rel359. The source code consists of four main packages
and one test package:
Rel3Server – This is the main database engine. It accepts input from Rel3Client, processes the
data and sends the results back to Rel3Client. Almost all the changes to Rel to create Rel359
were in this package.
Rel3Client – This package accepts user input from Rel3DBrowser, sends it to Rel3Server, accepts
the results from Rel3Server and makes them available to Rel3DBrowser. In principal Rel3Client
could be running on a different machine to Rel3Server.
Rel3DBrowser – This is the main user interface for Rel, it accepts user input sends it to
Rel3Client and displays the results returned by Rel3Client.
Rel3Shared – This package contains parameters that are shared between Rel3Server and Rel3Client.
In practice this is just the port used for communication.
Rel3Test – This package contains tests for various parts of Rel. I did not update this for
Rel359 so some of the tests may fail.
In addition to the packages above, Rel359 requires the Sleepycat / Oracle
BerkeleyDB library and
JUnit. BerkeleyDB provides the actual storage functionality for
Rel359 and the compiled version can be found as je.jar in the Rel program folder. JUnit provides
test functionality for the Rel3Test package.
If you want to build Rel359 for yourself there are a number of dependencies between these packages
which must be resolved before Rel359 will build:
Rel3Shared has no dependencies.
Rel3Server depends on R3Shared and the Sleepycat / Oracle BerkeleyDB library.
Rel3Client depends on Rel3Shared & Rel3Server.
Rel3DBrowser depends on Rel3Client & Rel3Server.
Rel3Test depends on R3Server and the JUnit library.
Rel does not directly implement the Tutorial D language parser in hand written code, rather
it uses JavaCC. This reads the grammar for a language
and then generates a parser based on the rules of the supplied grammar. I used the same approach
in Rel359 as it meant that in most cases I just needed to update the grammar and rebuild.
If you have extracted the source files to the default location, then this grammar file
will be found at
Note that this file is still includes "tutoriald" in the path and file name although it has now
been converted for the M359 Language. Tutorial D is referenced at many points in the code
and I didn't have time to rename everything appropriately.
All the several hundred files in the
folder are auto-generated by JavaCC and should not be modified manually.