blueloveTH 2 ani în urmă
părinte
comite
19b2eda72a
2 a modificat fișierele cu 6 adăugiri și 8 ștergeri
  1. 2 4
      include/pocketpy/lexer.h
  2. 4 4
      src/compiler.cpp

+ 2 - 4
include/pocketpy/lexer.h

@@ -92,10 +92,8 @@ enum Precedence {
   PREC_FACTOR,        // * / % // @
   PREC_FACTOR,        // * / % // @
   PREC_UNARY,         // - not ~
   PREC_UNARY,         // - not ~
   PREC_EXPONENT,      // **
   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 };
 enum StringType { NORMAL_STRING, RAW_STRING, F_STRING, NORMAL_BYTES };

+ 4 - 4
src/compiler.cpp

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