This commit is contained in:
blueloveTH 2024-01-19 18:29:01 +08:00
parent 8079b82813
commit 19b2eda72a
2 changed files with 6 additions and 8 deletions

View File

@ -92,10 +92,8 @@ enum Precedence {
PREC_FACTOR, // * / % // @
PREC_UNARY, // - not ~
PREC_EXPONENT, // **
PREC_CALL, // ()
PREC_SUBSCRIPT, // []
PREC_ATTRIB, // .index
PREC_PRIMARY,
PREC_PRIMARY, // f() x[] a.b 1:2
PREC_HIGHEST,pyth
};
enum StringType { NORMAL_STRING, RAW_STRING, F_STRING, NORMAL_BYTES };

View File

@ -74,9 +74,9 @@ namespace pkpy{
#define PK_METHOD(name) &Compiler::name
#define PK_NO_INFIX nullptr, PREC_NONE
for(TokenIndex i=0; i<kTokenCount; i++) rules[i] = { nullptr, PK_NO_INFIX };
rules[TK(".")] = { nullptr, PK_METHOD(exprAttrib), PREC_ATTRIB };
rules[TK("(")] = { PK_METHOD(exprGroup), PK_METHOD(exprCall), PREC_CALL };
rules[TK("[")] = { PK_METHOD(exprList), PK_METHOD(exprSubscr), PREC_SUBSCRIPT };
rules[TK(".")] = { nullptr, PK_METHOD(exprAttrib), PREC_PRIMARY };
rules[TK("(")] = { PK_METHOD(exprGroup), PK_METHOD(exprCall), PREC_PRIMARY };
rules[TK("[")] = { PK_METHOD(exprList), PK_METHOD(exprSubscr), PREC_PRIMARY };
rules[TK("{")] = { PK_METHOD(exprMap), PK_NO_INFIX };
rules[TK("%")] = { nullptr, PK_METHOD(exprBinaryOp), PREC_FACTOR };
rules[TK("+")] = { nullptr, PK_METHOD(exprBinaryOp), PREC_TERM };
@ -421,7 +421,7 @@ namespace pkpy{
void Compiler::exprSubscr() {
auto e = make_expr<SubscrExpr>();
e->a = ctx()->s_expr.popx();
e->a = ctx()->s_expr.popx(); // a[...]
auto slice = make_expr<SliceExpr>();
bool is_slice = false;
// a[<0> <state:1> : state<3> : state<5>]