diff options
author | Camil Staps | 2017-07-19 12:02:22 +0000 |
---|---|---|
committer | Camil Staps | 2017-07-19 12:06:27 +0000 |
commit | 64034cafa2d192f59f4890a67896c5b311cbf84f (patch) | |
tree | f95a40ec6147d36136335394a5b69f0bc0d76f3b /README.md | |
parent | Reorganise (diff) |
Add readme and license
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..94cba01 --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# 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 + +``` +<Program> ::= <Function>-list + +<Function> ::= <Type> <Name> '(' <Arg>-clist ')' '{' <CodeBlock> '}' + +<CodeBlock> ::= <Initialisation>-list <Statement>-list + +<Initialisation> ::= <Type> <Name>-clist ';' + +<Statement> ::= <Name> ':=' <Expression> ';' + | <Expression> ';' + | 'return' [<Expression>] ';' + | 'if' '(' <Expression> ')' '{' <CodeBlock> '}' + ['else' '{' <CodeBlock> '}'] ';' + | 'while' '(' <Expression> ')' '{' <CodeBlock> '}' ';' + | '|~' <MachineCode> + +<Expression> ::= <Name> + | <Literal> + | <Name> '(' <Expression>-clist ')' + | <Op1> <Expression> + | <Op2> <Expression> + +<Op1> ::= '~' + +<Op2> ::= '+' | '-' | '*' | '/' | '%' | '==' | '||' | '&&' + +<Type> ::= 'Bool' | 'Int' | 'Void' + +<Literal> ::= <Bool> | <Int> +``` + +## 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 |