rail-compiler-editor alternatives and similar packages
Based on the "Language" category.
Alternatively, view rail-compiler-editor alternatives based on common mentions on social networks and blogs.
elm-compiler10.0 3.5 rail-compiler-editor VS elm-compilerCompiler for Elm, a functional language for reliable webapps.
stylish-haskellHaskell code prettifier [Moved to: https://github.com/haskell/stylish-haskell]
liquidhaskellLiquid Types For Haskell
brittany9.9 0.0 rail-compiler-editor VS brittanyhaskell source code formatter
cryptol9.9 9.1 rail-compiler-editor VS cryptolCryptol: The Language of Cryptography
polysemy9.9 4.5 rail-compiler-editor VS polysemy:gemini: higher-order, no-boilerplate monads
ivory9.8 0.0 rail-compiler-editor VS ivoryThe Ivory EDSL
elm-serverServer for developing Elm projects
elm-reactorInteractive development tool for Elm programs
elm-get9.7 0.0 rail-compiler-editor VS elm-getTool for sharing and using Elm libraries
haskell-src-extsManipulating Haskell source: abstract syntax, lexer, parser, and pretty-printer
elm-packagePackage manager for Elm libraries
frp-arduinoArduino programming without the hassle of C.
haskell-tools-ast-fromghcDeveloper tools for Haskell
haskell-tools-astDeveloper tools for Haskell
haskell-tools-ast-genDeveloper tools for Haskell
language-pythonA parser for Python 2.x and 3.x written in Haskell
liquid-fixpointHorn Clause Constraint Solving for Liquid Types
nirum9.5 0.0 rail-compiler-editor VS nirumNirum: IDL compiler and RPC/distributed object framework for microservices
elsa9.4 0.0 rail-compiler-editor VS elsaElsa is a lambda calculus evaluator
axel9.4 5.5 rail-compiler-editor VS axelHaskell + Lisp
elm-exportCreate Elm types and JSON decoders from Haskell source.
shentong9.3 0.0 rail-compiler-editor VS shentongA Haskell implementation of the Shen programming language.
tal9.3 0.0 rail-compiler-editor VS talAn implementation of Typed Assembly Language (Morrisett, Walker, Crary, Glew)
language-javaJava parser and printer for haskell
camfort9.2 0.0 rail-compiler-editor VS camfortLight-weight verification and transformation tools for Fortran
hfmt9.2 0.0 rail-compiler-editor VS hfmtFormat Haskell programs. Inspired by the gofmt utility.
elm-bridgeHaskell: Derive Elm types from Haskell types
ghc-justdoitA magic typeclass that just does it
hgrep9.1 0.8 rail-compiler-editor VS hgrepSearch Haskell source code from the command line
jvm-parserA Haskell parser for JVM bytecode files
type-of-htmlHigh performance type safe html generation
peggy9.1 0.0 rail-compiler-editor VS peggyThe Parser Generator for Haskell
language-c-quoteC/CUDA/OpenCL/Objective-C quasiquoting library.
exferenceHaskell tool to generate expressions from types
fortran-srcFortran parsing and static analysis infrastructure
aterm-utilsUtility functions for working with aterms as generated by Minitermite
language-rustParser and pretty-printer for the Rust language
language-ecmascriptHaskell library: ECMAScript parser, pretty-printer and additional tools
formura8.8 0.0 L3 rail-compiler-editor VS formuraDescribe stencil formurae without even translating them
why38.8 0.0 rail-compiler-editor VS why3Haskell support for the Why3 input format
homplexityHaskell code complexity and quality measurement
ministg8.8 0.0 rail-compiler-editor VS ministgMinistg is an interpreter for a high-level, small-step, operational semantics for the STG machine.
imprevu8.7 0.0 rail-compiler-editor VS imprevuThe Nomyx game
LibClang8.7 0.0 rail-compiler-editor VS LibClangHaskell FFI to libclang
nomyx-libraryThe Nomyx game
haskell-namesHaskell suite library for name resolution
purescript-tsd-genTypeScript Declaration File (.d.ts) generator for PureScript
Access the most powerful time series database as a service
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of rail-compiler-editor or a related project?
A Rail compiler written in Haskell
This is (or rather: will become) a compiler for the esoteric programming language Rail, written in Haskell.
Contents of this repository
documentationcontains additional documentation.
- The main documentation will be found in the code.
srccontains the Rail compiler and editor (written in Haskell).
testscontains the hunit tests
integration-testscontains integration tests
- see section
testsfor more information.
- see section
If you plan to contribute to the project, make sure that your contribution does not break any tests and hlint is happy.
Though not applied consistently until now, there are some things which would be really NICE to have:
- Set indetations to 2 spaces
- Remove trailing white spaces
- Do not retab/reformat other people's code, especially not in a commit which contains some logical changes as well
- One logical change per commit
- Integrate hlint to your editor of choice and try to stick to the suggestions it makes
- Would be cool, if lines are not longer than 80 characters
Module testing with HUnit
tests contains a
Main.hs file that runs an HUnit test with a list of test
functions. For each module
src/[module-name].hs of the compiler pipeline
exists a corresponding test file
tests/T[module-name].hs exporting a list of
test functions for the named module. In the
Main.hs file the list that is
tested by HUnit, is concatenated by the exported test lists of all test modules.
Integration tests are stored in
integration-tests in three subdirectories:
passing/contains tests that are testing already implemented features and that already passed before
failing/contains tests that are testing already implemented features but never passed
future/contains tests that are testing functionality that will be added in the future
Each test consists of two files. A rail program
[test-name].rail and an
The io-file specifies test cases, i.e. a set of inputs with the expected corresponding outputs of the rail-program.
Input and output as well as the test cases themselves are separated by a hash tag. If an input has more than one value, they are separated by a newline. Consider a rail program adding two numbers and printing the result (without any newlines). A corresponding io-file with two test cases could look as follows:
3 5 # 8 # 21 56 # 77
NOTE 1: printed newlines have to be stated explicitly. Consider a hello-world
Hello World\n (without any input). The io-file has to look
# Hello World\n
NOTE 2: The expected output is only tested against
stdout. If you want to test the output
stderr as well, you can add another section to a test case, separated by a single
This is the input. # This is the expected output on stdout. % This is the expected output on stderr. # Another input. # Another stdout output.
NOTE 3: Lines containing only a single
# character always delimit sections as
described above. There is no way to escape them, sorry.
tests/integration_tests.sh is a script written in bash. It iterates over all
rail programs in
passing/, compiles each of them using the current version of
our rail compiler and retrieves runnable llvm-code, i.e. it already links it
with the stack implementation, etc. For each input/output value, it puts the
input into the llvm-binary and compares the actual output with the current
output. The result will be printed to stdout.
Dependencies / Building the Compiler
- Install cabal (package cabal-install in most distributions)
- Install llvm, versions llvm-3.3 and llvm-3.4 work.
- If you don't use llvm-3.4 you manually need to install the corresponding haskell bindings, i.e.:
cabal install llvm-general-22.214.171.124
- Switch to project folder
cabal install --enable-teststo install all dependencies and build the project
cabal testto run the tests
- Run the compiler with
dist/build/SWPSoSe14/SWPSoSe14 -c -i <Source.rail> -o output
- You still need to link the stack manually if you want to have executables:
llvm-link <compiled.ll> src/RailCompiler/*.ll -o executable
You can generate the compiler documentation using
cabal haddock --executables
--haddock-options --ignore-all-exports from the root project directory.
Currently, there are several (long-lived) team branches and one main development branch,
master branch should always contain something that "works" to
some degree, i. e. it should never break.
All team branches are merged into the
master branch on a regular basis.
The following team branches exist. Except for
master, all branches not mentioned
here are to be considered (short-lived) feature branches.
gui: Contains everything with a graphical user interface, most notably the debugger and the graphical Rail editor.
intertarget-code: Contains code for the backend, for intermediate code generation and for code optimization.
preproc-lexer: Contains code for the preprocessor and lexer components.
synsem-analysis: Contains code for the syntactic/semantic analysis.
For additional information take a look at our wiki pages: https://github.com/SWP-Ubau-SoSe2014-Haskell/SWPSoSe14/wiki