aboutsummaryrefslogtreecommitdiffstats
path: root/c_parser
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-02-12 18:44:18 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-02-12 18:44:18 +0000
commit94de096a3f8d90c683f9456e7dd698edd6ee39dd (patch)
treed7f7910a666d5bfd347e55ca428f7ad942189a09 /c_parser
parent1111f138d9cd0bb481e0a6f5d68843a463974d5a (diff)
downloadCompiler-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.hpp6
-rw-r--r--c_parser/src/c_lexer.flex2
-rw-r--r--c_parser/src/c_parser.y41
-rw-r--r--c_parser/src/parser_main.cpp5
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;
+}