Start adding some grammar definition

This commit is contained in:
Josh Holtrop 2018-04-11 22:05:39 -04:00
parent 50480d80b4
commit 9d2c41edc1

View File

@ -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
;
%%