aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LICENSE21
-rw-r--r--README.md50
2 files changed, 71 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..7e05365
--- /dev/null
+++ b/LICENSE
@@ -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 &amp; License
+
+Copyright &copy; 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