diff options
-rw-r--r-- | LICENSE | 21 | ||||
-rw-r--r-- | README.md | 50 |
2 files changed, 71 insertions, 0 deletions
@@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017 Camil Staps <info@camilstaps.nl> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. 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 |