# Sil A compiler for the simple imperative language sil. This compiler is written in [Clean][clean] and compiles to [ABC-assembly][abc], which can be used to generate actual machine code using Clean's code generator or can be interpreted with the [ABCMachine][abc-github] project. ## Grammar ``` ::= -list -list ::= '(' -clist ')' '{' '}' ::= -list -list ::= -clist ';' ::= [':=' ] ::= [ ':='] ';' | 'return' [] ';' | 'if' '(' ')' '{' '}' ['else' 'if' '(' ')' '{' '}']-list ['else' '{' '}'] | 'while' '(' ')' '{' '}' | '|~' ::= | | '(' -clist ')' // Function application | // Unary operator | // Binary operator | '(' -clist ')' // Tuple | '[' ']' // Empty list | '[' -clist ']' // List shortcut | '.' // Field application | '(' ')' // Parenthised expression ::= '~' | '!' ::= '+' | '-' | '*' | '/' | '%' // Int Int -> Int | '==' | '<>' | '<' | '>' | '<=' | '>=' // Int Int -> Bool | '||' | '&&' // Bool Bool -> Bool | ':' // a [a] -> [a] ::= 'Bool' | 'Int' | 'Void' | '(' -clist ')' // Tuple | '[' ']' // List ::= | ::= 'True' | 'False' ::= -list ``` Comments (single-line `//`, multi-line `/* ... */`) are not included in the grammar above. ## Dependencies You need a working Clean installation to build the compiler and at least `clm` and the code generator to use it. ## Vim highlighting In the `vim` directory. ## Author & License Copyright © 2017 [Camil Staps][cs]. Licensed under MIT, see the `LICENSE` file. [abc]: https://en.wikipedia.org/wiki/Clean_%28programming_language%29#The_ABC-Machine [abc-github]: https://github.com/camilstaps/ABCMachine [clean]: http://clean.cs.ru.nl [cs]: https://camilstaps.nl