Parjac2 is an experiment in building a java compiler.
It is supposed to be built to be easy to read, easy to run and extend.
It may be used for parsing or compiling other things in the future.
The basic parts of parjac are
- Written with a generic lexer and parser that ought to work for many more languages.
- Written with modern java in mind and using java 11 as the test bed of functionality and speed.
- A hand written java lexer. See CharBufferLexer.java.
- An earley based parser. See Parser.java.
- A grammar that tries to stay true to the grammar in
§19 of the java 11 jls.
- Figuring out types and actual code generation will be added based on code from parjac later on.
Grabbing the code
git clone http://www.khelekore.org/parjac2/parjac2.git
Compiling and running
java -jar target/parjac2-1.0-shaded.jar -i src/ -d /tmp/out/
If you do not give any command line arguments (as in run with
java -jar target/parjac2-1.0-shaded.jar) you will get a usage clause.
You can of course also use any other maven targets, possibly
It is also possible to run the current test program from the command line, something like this can be used:
java --module-path=target/classes/ --module org.khelekore.parjac2/org.khelekore.parjac2.java11.TestParser /tmp/some/File.java
java --module-path=target/classes/ --module org.khelekore.parjac2/org.khelekore.parjac2.java11.TestParser -print_syntax /tmp/some/File.java
mvn exec:java -Dexec.cleanupDaemonThreads=false -Dexec.mainClass=org.khelekore.parjac2.java11.BatchCompiler -Dexec.args="-i source_directory/ -d destination_directory/"
Please note that this does not compile code correctly yet!
Currently it parses the code and generates output directories and generates some sort of output files, but they do not contain everything yet.