From 94de096a3f8d90c683f9456e7dd698edd6ee39dd Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Sun, 12 Feb 2017 18:44:18 +0000 Subject: Continuing parser and introducing expressions and statements --- .gitignore | 1 + c_parser/include/ast.hpp | 6 ++++++ c_parser/src/c_lexer.flex | 2 +- c_parser/src/c_parser.y | 41 ++++++++++++++--------------------------- c_parser/src/parser_main.cpp | 5 +++++ 5 files changed, 27 insertions(+), 28 deletions(-) create mode 100644 c_parser/include/ast.hpp diff --git a/.gitignore b/.gitignore index cc61368..56c17e7 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ c_parser/build/ *.tab.cpp *.tab.hpp *.o +*.output 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 TERM FACTOR +%type STMNT_LIST STMNT COMP_STMNT EXPR_STMNT SLCT_STMNT ITR_STMNT JMP_STMNT %type T_CONSTANT %type 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; +} -- cgit