diff --git a/doc/README b/doc/README index b752253..ee585d6 100644 --- a/doc/README +++ b/doc/README @@ -23,4 +23,93 @@ and type in your program, you can use rlwrap ./scully -for more input awesomeness. (http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap) \ No newline at end of file +for more input awesomeness. (http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap) + +# 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. + +# The Symbols are +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