duplicated readme
This commit is contained in:
127
doc/README
127
doc/README
@@ -1,127 +0,0 @@
|
|||||||
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
|
|
||||||
Reference in New Issue
Block a user