Exemplo n.º 1
0
 // struct.h
 // static void KonohaSpace_defineSyntax(CTX, kKonohaSpace *ks, KDEFINE_SYNTAX *syndef)
 public void defineSyntax(KDEFINE_SYNTAX[] syndefs)
 {
     //KMethod pParseStmt = null, pParseExpr = null, pStmtTyCheck = null, pExprTyCheck = null;
     //KMethod mParseStmt = null, mParseExpr = null, mStmtTyCheck = null, mExprTyCheck = null;
     foreach (var syndef in syndefs)
     {
         ctx.kmodsugar.AddKeyword(syndef.name, syndef.kw);
         KeywordType kw = ctx.kmodsugar.keyword_(syndef.name, Symbol.NewID).Type;
         Syntax syn = GetSyntax(kw, true);
         //syn.token = syndef.name;
         syn.Flag |= syndef.flag;
         //if(syndef.type != null) {
         //    syn.Type = syndef.type;
         //}
         //if(syndef.op1 != null) {
         //    syn.Op1 = null;// syndef.op1;//Symbol.Get(ctx, syndef.op1, Symbol.NewID, SymPol.MsETHOD);
         //}
         //if(syndef.op2 != null) {
         //    syn.Op2 = null;// syndef.op2;//Symbol.Get(ctx, syndef.op2, Symbol.NewID, SymPol.MsETHOD);
         //}
         if (syndef.priority_op2 > 0)
         {
             syn.priority = syndef.priority_op2;
         }
         if (syndef.rule != null)
         {
             List<Token> adst;
             parseSyntaxRule(syndef.rule, new LineInfo(0, ""), out adst);
             syn.SyntaxRule = adst;
         }
         syn.ParseStmt = syndef.ParseStmt;
         syn.ParseExpr = syndef.ParseExpr ?? KModSugar.UndefinedParseExpr;
         syn.TopStmtTyCheck = syndef.TopStmtTyCheck;
         syn.StmtTyCheck = syndef.StmtTyCheck ?? ctx.kmodsugar.UndefinedStmtTyCheck;
         syn.ExprTyCheck = syndef.ExprTyCheck ?? ctx.kmodsugar.UndefinedExprTyCheck;
         if (syn.ParseExpr == KModSugar.UndefinedParseExpr)
         {
             if (syn.Flag == SynFlag.ExprOp)
             {
                 syn.ParseExpr = KModSugar.ParseExpr_Op;
             }
             else if (syn.Flag == SynFlag.ExprTerm)
             {
                 syn.ParseExpr = KModSugar.ParseExpr_Term;
             }
         }
     }
     //Console.WriteLine("syntax size={0}, hmax={1}", syntaxMap.Count, syntaxMap.);
 }