This is the code repository for refu, a hybrid language with a strong type system based on algebraic data types.
For a language reference, tutorial and overall documentation visit here.
The required dependencies are:
- For building we need cmake
- For the backend code generation we need llvm
- For hash table generation we use gperf
- For units tests we need libcheck
The optional dependencies are:
- For generating dependency graphs, we can use graphviz
- For extra memory checks during unit testing, we can use valgrind
- For generating a json file of the AST, we can use json-c
- For regular expressions (not yet used anywhere yet), we can use pcre2
- For generating code coverage reports we can use lcov
Dependencies in Linux
Use your distribution's package manager
Dependencies in Macosx
brew install cmake brew install pkg-config brew install check brew install llvm brew install lcov
Installing llvm does not place it into the
PATH and as such you will also need to put its path
there manually. In recent versions this means adding the following to
git clone --recursive https://github.com/refu-lang/refu cd refu mkdir build cd build cmake .. make
Run the tests
In order to run the tests you have to also build them. This is done by providing an extra option to cmake.
cmake -DCMAKE_BUILD_TYPE=Debug .. -DTEST=1
There is a convenience test script that runs all of the tests for refu and its rfbase submodule.
You can invoke
refu --help in order to get all the possible arguments along with
--help display this help and exit --version display version info and exit -v, --verbose-level=1-4 Set compiler verbosity level --backend=GCC|LLVM The backend connection the refu compiler will user --backend-debug If given then some debug information about the backend code will be printed --output-ast If given then after analysis state the AST will be output in JSON format -o, --output=name output file name. Defaults to input.exe if not given --rir Interpret the input file as a RIR file and parse it. -r, --print-rir If given will output the intermediate representation in a file <file> input files
At the moment these are the important arguments.
--verbose-levelWill determine how verbose the output of the compiler will be.
--backend-debugWill print out to the stdout the LLVM IR for debugging purposes.
--output-astWill output the Abstract Syntax Tree in a .json format
--print-rirWill print the generated Refu Intermediate Format (RIR) for deugging purposes.
You are more than welcome to open a Pull Request here in Github if you would like to contribute to the development of refu.
Coding Style and Best Practises