- Requirements
- Make
- G++/Clang++
- Bison
- Flex
- Python 2.7
- libjsoncpp-dev
- llvm-3.7-dev
- pkg-config
- Tested on
- Ubuntu Server 15.10/16.04 AMD64
- Make 4.0-8.2
- Clang++ 1:3.6-26ubuntu1
- Bison 2:3.0.4.dfsg-1
- Flex 2.5.39-8
- Python 2.7.10-4ubuntu2
- libjsoncpp-dev 0.10.5-1
- llvm-3.7-dev 1:3.7-4ubuntu1
- pkg-config 0.29-2ubuntu1
- How-to
make
- Command line parameters for jcc
jcc [options] <input_file1> [input_file2] [input_file3] ...
Options:--dump-html <html_filename>
Output the token stream and AST to a HTML file to view--lex
Do the tokenize(lexical analysis) stage only--parse
Do the parse(syntax analysis) stage only--llvm
Do the compile stage only. (Generate the llvm assembly file)-S
Do the compile stage only. (Generate the target assembly file)-c
Do the assemble stage only. (Generate the object file)-o <output_filename>
Specifiy the output filename-fno-builtin
Don't include the standard library automatically. Mainly used to compile standard library itself.
- Built-in tests
You can just runmake test
, it will compile the test cases intests
directory using optionjcc --dump-html tests/xxx.html --llvm -o tests/xxx.ll tests/xxx.jas
and then runclang
to compile and link the.ll
file against jascal libs' implementations (such aslib/io.impl.ll
)
For eash test case, it will generate anxxx
file which is the executable binary file of the source file, and anxxx.html
file which could be opened in browser to see the token stream and the AST of the source file Additionally, if there is any test data for a test case (namedtests/xxx-testx.in
andtests/xxx-testx.out
), the tester will automatically run the executable file and feed the.in
file to it, then get the output and compare it with.out
file. There will be a time limit which is set to 2 seconds. The comparison will ignore blank line. A[TEST] xxx.in -> xxx ...pass
will be printed if the output match the.out
file.