From 9d2c41edc1d0f8be377740de526ad7da5ca87e61 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 11 Apr 2018 22:05:39 -0400 Subject: [PATCH] Start adding some grammar definition --- src/parser/parser.y | 110 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) diff --git a/src/parser/parser.y b/src/parser/parser.y index a0c801e..03beb9e 100644 --- a/src/parser/parser.y +++ b/src/parser/parser.y @@ -115,7 +115,115 @@ static void handle_error(const char * str, const YYLTYPE * yylloc); %% -translation_unit: TOK_PLUS; +constant: TOK_FLOAT_CONST + | TOK_INT_CONST + | TOK_IDENTIFIER + | TOK_CHAR_CONST + ; + +primary_expression: TOK_IDENTIFIER + | constant + | TOK_STR_CONST + | TOK_LPAREN expression TOK_RPAREN + ; + +expression: assignment_expression + | expression TOK_COMMA assignment_expression + ; + +constant_expression: conditional_expression + ; + +conditional_expression: logical_or_expression + | logical_or_expression TOK_QUESTION expression TOK_COLON conditional_expression + ; + +assignment_expression: conditional_expression + | unary_expression TOK_ASSIGN assignment_expression + ; + +postfix_expression: primary_expression + | postfix_expression TOK_LBRACKET expression TOK_RBRACKET + | postfix_expression TOK_LPAREN TOK_RPAREN + | postfix_expression TOK_LPAREN argument_expression_list TOK_RPAREN + | postfix_expression TOK_DOT TOK_IDENTIFIER + | postfix_expression TOK_ARROW TOK_IDENTIFIER + | postfix_expression TOK_INCREMENT + | postfix_expression TOK_DECREMENT + ; + +argument_expression_list: assignment_expression + | argument_expression_list TOK_COMMA assignment_expression + ; + +unary_expression: postfix_expression + | TOK_INCREMENT unary_expression + | TOK_DECREMENT unary_expression + | unary_operator + | cast_expression + | TOK_SIZEOF unary_expression + | TOK_SIZEOF TOK_LPAREN type_name TOK_RPAREN + ; + +unary_operator: TOK_BITAND + | TOK_TIMES + | TOK_PLUS + | TOK_MINUS + | TOK_BITNOT + | TOK_NOT + ; + +cast_expression: unary_expression + | TOK_LPAREN type_name TOK_RPAREN cast_expression + ; + +multiplicative_expression: cast_expression + | multiplicative_expression TOK_TIMES cast_expression + | multiplicative_expression TOK_DIVIDE cast_expression + | multiplicative_expression TOK_MOD cast_expression + ; + +additive_expression: multiplicative_expression + | additive_expression TOK_PLUS multiplicative_expression + | additive_expression TOK_MINUS multiplicative_expression + ; + +shift_expression: additive_expression + | shift_expression TOK_LSHIFT additive_expression + | shift_expression TOK_RSHIFT additive_expression + ; + +relational_expression: shift_expression + | relational_expression TOK_LESS shift_expression + | relational_expression TOK_GREATER shift_expression + | relational_expression TOK_LESSEQ shift_expression + | relational_expression TOK_GREATEREQ shift_expression + ; + +equality_expression: relational_expression + | equality_expression TOK_EQUALS relational_expression + | equality_expression TOK_NOTEQUALS relational_expression + ; + +and_expression: equality_expression + | and_expression TOK_BITAND equality_expression + ; + +exclusive_or_expression: and_expression + | exclusive_or_expression TOK_XOR and_expression + ; + +inclusive_or_expression: exclusive_or_expression + | inclusive_or_expression TOK_BITOR exclusive_or_expression + ; + +logical_and_expression: inclusive_or_expression + | logical_and_expression TOK_AND inclusive_or_expression + ; + +logical_or_expression: logical_and_expression + | logical_or_expression TOK_OR logical_and_expression + ; %%