Files
scully/doc/README

121 lines
2.9 KiB
Plaintext
Raw Normal View History

2013-05-31 21:36:22 +02:00
# Requirements
- LLVM 3.2
2013-06-02 08:52:18 +02:00
- A recent C and C++ compiler
2013-05-31 21:36:22 +02:00
- CMake 2.6 or newer
# Used Libraries
2013-06-01 22:43:28 +02:00
- lemon parser (from sqlite) (grammar/*.c)
- lexertl (http://www.benhanson.net/lexertl.html) (inc/lexertl/*)
2013-06-02 08:52:18 +02:00
# 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
2013-06-02 09:01:50 +02:00
for more input awesomeness. (http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap)
2013-06-02 09:06:53 +02:00
# Examples
see doc/ directory, you can directly pipe them into the interpreter
2013-06-02 09:01:50 +02:00
# 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.
2013-06-02 09:06:53 +02:00
# Symbols Map
2013-06-02 09:01:50 +02:00
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