diff options
| author | Nagi5Yeq <wu@x-nagi.com> | 2020-05-29 00:08:49 +0800 |
|---|---|---|
| committer | Nagi5Yeq <wu@x-nagi.com> | 2020-05-29 00:08:49 +0800 |
| commit | d4e6ae6f8237f18d9d0b51e7a6404118dffb709f (patch) | |
| tree | eb0969f20e5959866e535ac8fe5c84db55595ab5 /Parser.y | |
| parent | 404afbef3c9223bc44ddd91066c52c44349e43c7 (diff) | |
add pointer and shifting support
Diffstat (limited to 'Parser.y')
| -rw-r--r-- | Parser.y | 20 |
1 files changed, 12 insertions, 8 deletions
@@ -45,8 +45,8 @@ YY_DECL; %token PROGRAM IDENTIFIER CONST VAR BEGINS ENDS FUNCTION %token IF THEN ELSE WHILE DO REPEAT UNTIL %token BOOLEAN CHAR INTEGER REAL STRING -%token ADD SUB MUL REAL_DIV DIV MOD LT LE GT GE EQ NE -%token AND NOT OR XOR +%token ADD SUB MUL REAL_DIV DIV MOD LT LE GT GE EQ NE CARET AT +%token AND NOT OR XOR SHL SHR %token INTEGER_LITERAL REAL_LITERAL STRING_LITERAL BOOLEAN_LITERAL CHAR_LITERAL %type <std::string> IDENTIFIER program_header @@ -121,11 +121,12 @@ vars ; type - : BOOLEAN {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::BOOLEAN);} - | CHAR {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::CHAR);} - | INTEGER {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::INTEGER);} - | REAL {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::REAL);} - | STRING {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::STRING);} + : BOOLEAN {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::BOOLEAN);} + | CHAR {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::CHAR);} + | INTEGER {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::INTEGER);} + | REAL {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::REAL);} + | STRING {$$=ctx->GetTypeManager()->GetBuiltinType(pcc::BuiltinType::STRING);} + | CARET type {$$=ctx->GetTypeManager()->GetPointerType($2);} ; /* ==================[function part]================== */ @@ -213,6 +214,7 @@ l2_expression l3_expression : l4_operator l3_expression {$$=std::make_shared<pcc::UnaryExprNode>(ctx,$1,$2);} + | AT lvalue {$$=std::make_shared<pcc::GetAddressNode>(ctx, $2);} | standalone_expression {$$=$1;} ; @@ -236,7 +238,6 @@ l2_operator : ADD {$$=pcc::BinaryOperator::ADD;} | SUB {$$=pcc::BinaryOperator::SUB;} | OR {$$=pcc::BinaryOperator::OR;} - | XOR {$$=pcc::BinaryOperator::XOR;} ; l3_operator @@ -245,6 +246,9 @@ l3_operator | REAL_DIV {$$=pcc::BinaryOperator::REAL_DIV;} | MOD {$$=pcc::BinaryOperator::MOD;} | AND {$$=pcc::BinaryOperator::AND;} + | XOR {$$=pcc::BinaryOperator::XOR;} + | SHL {$$=pcc::BinaryOperator::SHL;} + | SHR {$$=pcc::BinaryOperator::SHR;} ; l4_operator |
