Supports bit shift operators.

I forgot...
This commit is contained in:
falsycat 2021-01-05 00:00:00 +00:00
parent ad3fbc58d9
commit d0ff990914
4 changed files with 19 additions and 5 deletions

16
biner.y
View File

@ -103,8 +103,8 @@ resolve_constant_(
%type <ptr> struct_member_type array_struct_member_type unqualified_struct_member_type
%type <ptr> expr or_expr and_expr bit_or_expr bit_xor_expr
%type <ptr> bit_and_expr equality_expr relational_expr add_expr
%type <ptr> mul_expr unary_expr operand
%type <ptr> bit_and_expr equality_expr relational_expr shift_expr
%type <ptr> add_expr mul_expr unary_expr operand
%start decl_list
@ -314,7 +314,7 @@ equality_expr
;
relational_expr
: add_expr
: shift_expr
| relational_expr '>' add_expr {
$$ = create_operator_($1, BINER_TREE_EXPR_TYPE_OPERATOR_GREATER, $3);
}
@ -329,6 +329,16 @@ relational_expr
}
;
shift_expr
: add_expr
| shift_expr BIT_LSHIFT add_expr {
$$ = create_operator_($1, BINER_TREE_EXPR_TYPE_OPERATOR_BIT_LSHIFT, $3);
}
| shift_expr BIT_RSHIFT add_expr {
$$ = create_operator_($1, BINER_TREE_EXPR_TYPE_OPERATOR_BIT_RSHIFT, $3);
}
;
add_expr
: mul_expr
| add_expr '+' mul_expr {

View File

@ -29,8 +29,8 @@ struct teacher_t {
};
struct student_t {
lu8[10] scores;
lu8 absents;
lu8[(1 << 4) - 6] scores;
lu8 absents;
};
struct user_t {

View File

@ -56,6 +56,8 @@ static const char* const expr_operator_string_map_
[BINER_TREE_EXPR_TYPE_OPERATOR_BIT_OR] = "|",
[BINER_TREE_EXPR_TYPE_OPERATOR_BIT_NOT] = "~",
[BINER_TREE_EXPR_TYPE_OPERATOR_BIT_XOR] = "^",
[BINER_TREE_EXPR_TYPE_OPERATOR_BIT_LSHIFT] = "<<",
[BINER_TREE_EXPR_TYPE_OPERATOR_BIT_RSHIFT] = ">>",
};
typedef struct struct_member_info_t {

2
tree.h
View File

@ -36,6 +36,8 @@ typedef enum biner_tree_expr_type_t {
BINER_TREE_EXPR_TYPE_OPERATOR_BIT_OR,
BINER_TREE_EXPR_TYPE_OPERATOR_BIT_NOT,
BINER_TREE_EXPR_TYPE_OPERATOR_BIT_XOR,
BINER_TREE_EXPR_TYPE_OPERATOR_BIT_LSHIFT,
BINER_TREE_EXPR_TYPE_OPERATOR_BIT_RSHIFT,
BINER_TREE_EXPR_TYPE_OPERATOR_MAX_,
} biner_tree_expr_type_t;