Neven Villani, ENS Paris-Saclay
Make targets:
makebuildsmccmake testrunsmccon the tests: test files inassets/, verifiers inverify/. Each test is a.cfile and a.pyverifier, the output of the compiled executable is checked against the verifier for each set of command line arguments.
Note: make test executes ./check.py, which you can also invoke directly:
./check.py [TESTS] where TESTS is a list of
category/(e.g.except/) to run a full category of testsfile(e.g.except/exc1) to run a single test or is left empty to run all tests.
mcc [OPTIONS] [FILE]
Where options are:
-Dprint declarations and exit-Aprint AST and exit-Sdump assembler and exit-v,-v1report structural items-v2report details--no-reducedisables reduction of expressions whose result is known at compile-time (added because reduction was required for toplevel initialisation, and I decided to make it available for all expressions. Nevertheless having the ability to turn it on and off is useful for verification)--no-colorturn off syntax highlighting (added because I wanted to add color, but still needed the option of turning it off if the terminal doesn't support it or in order to pipe the output to a file)
cpp for the preprocessing, gcc for the linking.
─┐
├─ assets
│ ├─ calc/*.c arithmetic tests
│ ├─ call/*.c function call tests
│ ├─ decl/*.c variable declaration tests
│ ├─ boot/*.c tests to get started
│ ├─ except/*.c exception tests
│ ├─ flow/*.c control flow tests
│ ├─ misc/*.c tests that are difficult to automate
│ ├─ ptr/*.c array access and dereferences
│ ├─ reduce/*.c optimization tests
│ └─ string/*.c char* manipulation
├─ failures/*.c files that are expected to be rejected or issue a warning
├─ verify/*/*.py Python verifiers
├─ cAST.ml syntax tree builder
├─ clex.mll lexer
├─ compile.ml AST -> simplified assembler
├─ cparse.mly source -> AST
├─ cprint.ml AST pretty-print
├─ error.ml error reporting
├─ generate.ml simplified assembler -> asm source code
├─ main.ml argument parsing
├─ pigment.ml color abstraction
├─ reduce.ml ASM simplifier
├─ test.py automatic tester
├─ verbose.ml verbosity control
└─ *.mli