aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorCamil Staps2017-07-19 12:02:22 +0000
committerCamil Staps2017-07-19 12:06:27 +0000
commit64034cafa2d192f59f4890a67896c5b311cbf84f (patch)
treef95a40ec6147d36136335394a5b69f0bc0d76f3b /README.md
parentReorganise (diff)
Add readme and license
Diffstat (limited to 'README.md')
-rw-r--r--README.md50
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 &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