diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-02-12 18:44:18 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-02-12 18:44:18 +0000 |
commit | 94de096a3f8d90c683f9456e7dd698edd6ee39dd (patch) | |
tree | d7f7910a666d5bfd347e55ca428f7ad942189a09 /c_parser | |
parent | 1111f138d9cd0bb481e0a6f5d68843a463974d5a (diff) | |
download | Compiler-94de096a3f8d90c683f9456e7dd698edd6ee39dd.tar.gz Compiler-94de096a3f8d90c683f9456e7dd698edd6ee39dd.zip |
Continuing parser and introducing expressions and statements
Diffstat (limited to 'c_parser')
-rw-r--r-- | c_parser/include/ast.hpp | 6 | ||||
-rw-r--r-- | c_parser/src/c_lexer.flex | 2 | ||||
-rw-r--r-- | c_parser/src/c_parser.y | 41 | ||||
-rw-r--r-- | c_parser/src/parser_main.cpp | 5 |
4 files changed, 26 insertions, 28 deletions
diff --git a/c_parser/include/ast.hpp b/c_parser/include/ast.hpp new file mode 100644 index 0000000..05ed1e4 --- /dev/null +++ b/c_parser/include/ast.hpp @@ -0,0 +1,6 @@ +#ifndef AST_HPP +#define AST_HPP + + + +#endif diff --git a/c_parser/src/c_lexer.flex b/c_parser/src/c_lexer.flex index 833aa32..1c10345 100644 --- a/c_parser/src/c_lexer.flex +++ b/c_parser/src/c_lexer.flex @@ -17,7 +17,7 @@ OPERATOR [.][.][.]|[<>][<>][=]|[-][-]|[+][+]|[|][|]|[#][#]|[&][&]|[+\-*\/<>=!%^| FRACTIONALCONSTANT (([0-9]*\.[0-9]+)|([0-9]+\.)) EXPONENTPART ([eE][+-]?[0-9]+) -FLOATINGSUFFIX ([flFL]) +FLOATINGSUFFI X ([flFL]) INTEGERSUFFIX ([uU][lL]|[lL][uU]|[uUlL]) DECIMALCONSTANT ([1-9][0-9]*) diff --git a/c_parser/src/c_parser.y b/c_parser/src/c_parser.y index d3c7f0b..42e27de 100644 --- a/c_parser/src/c_parser.y +++ b/c_parser/src/c_parser.y @@ -20,9 +20,9 @@ void yyerror(const char *); std::string *string; } -%token T_KEYWORD T_IDENTIFIER T_CONSTANT T_OPERATOR +%token T_KEYWORD T_IDENTIFIER T_CONSTANT T_OPERATOR T_LCBRACKET T_RCBRACKET -%type <expr> EXPR TERM FACTOR +%type <expr> STMNT_LIST STMNT COMP_STMNT EXPR_STMNT SLCT_STMNT ITR_STMNT JMP_STMNT %type <number> T_CONSTANT %type <string> T_KEYWORD T_IDENTIFIER T_OPERATOR @@ -30,31 +30,18 @@ void yyerror(const char *); %% -ROOT : EXPR { g_root = $1; } - -EXPR : TERM { $$ = $1; } - | EXPR T_PLUS TERM { $$ = new AddOperator($1, $3); } - | EXPR T_MINUS TERM { $$ = new SubOperator($1, $3); } - -TERM : FACTOR { $$ = $1; } - | TERM T_TIMES FACTOR { $$ = new MulOperator($1, $3); } - | TERM T_DIVIDE FACTOR { $$ = new DivOperator($1, $3); } - -FACTOR : T_NUMBER { $$ = new Number( $1 ); } - | T_VARIABLE { $$ = new Variable( *$1 ); } - | T_LBRACKET EXPR T_RBRACKET { $$ = $2; } - | FUNCTION_NAME FACTOR { - if(*$1 == "log") { - $$ = new LogFunction($2); - } else if(*$1 == "exp") { - $$ = new ExpFunction($2); - } else { - $$ = new SqrtFunction($2); - }} - -FUNCTION_NAME : T_LOG { $$ = new std::string("log"); } - | T_EXP { $$ = new std::string("exp"); } - | T_SQRT { $$ = new std::string("sqrt"); } +ROOT : STMNT_LIST { g_root = $1; } + +STMNT_LIST : STMNT + | STMNT_LIST STMNT + +STMNT : COMP_STMNT + | EXPR_STMNT + | SLCT_STMNT + | ITR_STMNT + | JMP_STMNT + +COMP_STMNT : STMNT_LIST %% diff --git a/c_parser/src/parser_main.cpp b/c_parser/src/parser_main.cpp index e69de29..8bf67bf 100644 --- a/c_parser/src/parser_main.cpp +++ b/c_parser/src/parser_main.cpp @@ -0,0 +1,5 @@ +#include "ast.hpp" + +int main(int argc, char *argv[]) { + return 0; +} |