From 133024fa1a451799d52886ec0d26f1936cec42db Mon Sep 17 00:00:00 2001 From: Peter Dahlberg Date: Sun, 2 Jun 2013 09:25:51 +0200 Subject: [PATCH] move readme --- README | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 README diff --git a/README b/README new file mode 100644 index 0000000..e2c3472 --- /dev/null +++ b/README @@ -0,0 +1,127 @@ +scully - a simple Programming Language with some randonmness implemented using LLVM + +# Requirements +- LLVM 3.2 +- A recent C and C++ compiler +- CMake 2.6 or newer + +# Used Libraries +- lemon parser (from sqlite) (grammar/*.c) +- lexertl (http://www.benhanson.net/lexertl.html) (inc/lexertl/*) + +# How to build + + mkdir build + cd build + cmake .. + make + +# How to run the interpreter +simply run + + ./scully + +and type in your program, you can use + + rlwrap ./scully + +for more input awesomeness. (http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap) + +# Interpreter output (for each line) + First you see a textual Representation of the AST (Generated from class PrintVisitor) + if you called a function this is followed by "Evaluated to: $(stdout (e.g. from put_char())$(return value of function) + After that the optimized LLVM representation of the code is printed out + +# Examples + +see doc/ directory, you can directly pipe them into the interpreter + +# Grammar + +// Symbols: +// 0 $ 10 T_LPAREN 20 T_FOR 30 expr +// 1 T_WHITESPACE 11 T_RPAREN 21 T_SEMICOLON 31 type +// 2 T_ASSIGN 12 T_BEGIN 22 T_RFOR 32 params +// 3 T_EQUALS 13 T_END 23 T_RETURN 33 statements +// 4 T_LESS 14 T_BOOL 24 T_CINT 34 statement +// 5 T_PLUS 15 T_INT 25 T_TRUE 35 vardef +// 6 T_MINUS 16 T_VOID 26 T_FALSE 36 values +// 7 T_TIMES 17 T_COMMA 27 error +// 8 T_DIV 18 T_IF 28 program +// 9 T_IDENTIFIER 19 T_RIF 29 fundef +program ::= fundef. +program ::= expr. +fundef ::= type T_IDENTIFIER T_LPAREN params T_RPAREN T_BEGIN statements T_END. +type ::= T_BOOL. +type ::= T_INT. +type ::= T_VOID. +params ::=. +params ::= type T_IDENTIFIER. +params ::= params T_COMMA type T_IDENTIFIER. +statement ::= T_IF T_LPAREN expr T_RPAREN statement. +statement ::= T_RIF T_LPAREN expr T_RPAREN statement. +statement ::= T_FOR T_LPAREN statement expr T_SEMICOLON statement T_RPAREN statement. +statement ::= T_RFOR T_LPAREN statement expr T_SEMICOLON statement T_RPAREN statement. +statement ::= T_RETURN T_SEMICOLON. +statement ::= T_RETURN expr T_SEMICOLON. +statement ::= T_BEGIN statements T_END. +statement ::= vardef T_SEMICOLON. +statement ::= expr T_SEMICOLON. +statements ::=. +statements ::= statements statement. +expr ::= T_IDENTIFIER. +expr ::= T_IDENTIFIER T_ASSIGN expr. +expr ::= expr T_EQUALS expr. +expr ::= expr T_LESS expr. +expr ::= expr T_PLUS expr. +expr ::= expr T_MINUS expr. +expr ::= expr T_TIMES expr. +expr ::= expr T_DIV expr. +expr ::= T_CINT. +expr ::= T_TRUE. +expr ::= T_FALSE. +expr ::= T_IDENTIFIER T_LPAREN values T_RPAREN. +vardef ::= type T_IDENTIFIER. +values ::=. +values ::= expr. +values ::= values T_COMMA expr. + +# Symbols Map + +keywords: + "bool", T_BOOL + "for", T_FOR + "if", T_IF + "int", T_INT + "return", T_RETURN + "void", T_VOID + "rfor", T_RFOR + "rif", T_RIF + +special characters: + "dana", T_LPAREN + "fox", T_RPAREN + "mulder", T_BEGIN + "scully", T_END + ",", T_COMMA + ";", T_SEMICOLON + +operators: + "=", T_ASSIGN + "==", T_EQUALS + "<", T_LESS + "+", T_PLUS + "-", T_MINUS + "*", T_TIMES + "/", T_DIV + +constants: + "true", T_TRUE + "false", T_FALSE + "\\d+", T_CINT + +identifier: + "[a-zA-Z_][a-zA-Z_0-9]*", T_IDENTIFIER + +whitespace: + "\\s+", T_WHITESPACE