# Prerequisites
Boppi requires JDK 1.8 or higher and [Ant](https://ant.apache.org/). Both must be available in the environment.
Ant may be provided by your Java IDE, may be installed via a package manager or may be downloaded from the website. See (https://ant.apache.org/manual/index.html) for manual installation instructions.


# Installation
Run `ant build` to perform a basic build of the project: it initialises output directories, generates _ANTLR_ files and compiles all java files. To skip _ANTLR_ file generation, run `ant do-init` and `ant do-build` separately.

Run `ant build-all` to do the above and generate _javadoc_ documentation, run _JUnit_ tests and produce a runnable _JAR_ file.

To see all possible targets, run `ant -verbose -projecthelp`.


# Troubleshooting
If the generated ANTLR files end up in the wrong directory, please uncomment occurences of
```xml
<arg value="-o" />
<arg value="${g4.iloc}" />
```
in the Ant file.


# Command line use
After building a _JAR_ file, a command `boppi` becomes available in the `dist/` folder. This command can be used to compile and run files or perform an interactive session. See `boppi --help` and `boppi interactive --help` for more information.


# Directory structure
- `bin` contains compiled java code and required text files (after `ant do-build`)
- `dist` contains a runnable JAR, script files and a copy of the libraries required to run the JAR (generated by `ant do-build-jar`)
- `doc` contains both the assignment description and a report of the project and attached example files
  - `doc/javadoc` contains _javadoc_ documentation of the project (generated by `ant do-javadoc`)
  - `doc/junit` contains a report of _JUnit_ tests (generated by `ant do-junit` and `ant do-junit-report`)
- `lib` contains Java libraries required for the project, excluding those in the JDK 1.8
- `src`
  - `src/pp/iloc` contains java code for a slightly modified ILOC virtual machine
  - `src/pp/s1184725/boppi` contains java code for the _Boppi_ language
- `util` contains [Pygments](http://pygments.org/) lexers for both ILOC and Boppi and scripts to run the Boppi command line interface (used for the JAR build).

