Exemplo n.º 1
0
 private void WritePartialApply(miranaParser.ExpContext func, IEnumerable <miranaParser.ExpContext> arguments)
 {
     WriteImmediately("(function(...) return ");
     WriteExp(func);
     WriteImmediately('(');
     arguments.ForEach(t => {
         WriteExp(t);
         WriteImmediately(", ");
     });
     WriteImmediately("...) end)");
 }
Exemplo n.º 2
0
        private void WriteFullApply(miranaParser.ExpContext func, IEnumerable <miranaParser.ExpContext> arguments)
        {
            WriteExp(func);
            WriteImmediately('(');
            var a1 = arguments.ToArray();

            WriteExp(a1[0]);
            if (a1.Length > 0)
            {
                a1.Skip(1).ForEach(t => {
                    WriteImmediately(", ");
                    WriteExp(t);
                });
            }
            WriteImmediately(')');
        }
Exemplo n.º 3
0
 private void WriteExp(miranaParser.ExpContext context)
 {
     while (true)
     {
         if (context.expext() != null)
         {
             WriteExpext(context.expext());
         }
         else if (context.prefixexp() != null)
         {
             WritePrefixExp(context.prefixexp());
         }
         else if (context.operatorUnary() != null)
         {
             WriteOperatorUnary(context.operatorUnary());
             context = context.exp(0);
             continue;
         }
         else if (context.@string() != null || context.dots() != null)
         {
             CopySource(context);
         }
         else if (context.number() != null)
         {
             if (context.number().realNumber() != null)
             {
                 WriteImmediately(context.GetText().RemoveUnderscore());
             }
             else
             {
                 var    c1 = context.number().integerNumber();
                 string s  = c1.GetText().RemoveUnderscore();
                 if (c1.INT() != null)
                 {
                     if (s.Any(t => t != '0'))
                     {
                         s = new(s.SkipWhile(t => t == '0').ToArray());
                     }
                 }
                 WriteImmediately(s.ToBigInt().ToString());
             }
         }
         else if (context.tableconstructor() != null)
         {
             WriteTable(context.tableconstructor());
         }
         else if (context.functiondef() != null)
         {
             WriteFunctionDef(context.functiondef());
         }
         else if (context.operatorAnd() != null)
         {
             WriteExp(context.exp(0));
             WriteImmediately($" {context.operatorAnd().GetText()} ");
             context = context.exp(1);
             continue;
         }
         else if (context.operatorBitwise() != null)
         {
             WriteExp(context.exp(0));
             WriteImmediately($" {context.operatorBitwise().GetText()} ");
             context = context.exp(1);
             continue;
         }
         else if (context.operatorComparison() != null)
         {
             WriteExp(context.exp(0));
             WriteImmediately($" {context.operatorComparison().GetText()} ");
             context = context.exp(1);
             continue;
         }
         else if (context.operatorOr() != null)
         {
             WriteExp(context.exp(0));
             WriteImmediately($" {context.operatorOr().GetText()} ");
             context = context.exp(1);
             continue;
         }
         else if (context.operatorPower() != null)
         {
             WriteExp(context.exp(0));
             WriteImmediately($" {context.operatorPower().GetText()} ");
             context = context.exp(1);
             continue;
         }
         else if (context.operatorAddSub() != null)
         {
             WriteExp(context.exp(0));
             WriteImmediately($" {context.operatorAddSub().GetText()} ");
             context = context.exp(1);
             continue;
         }
         else if (context.operatorMulDivMod() != null)
         {
             WriteExp(context.exp(0));
             WriteImmediately($" {context.operatorMulDivMod().GetText()} ");
             context = context.exp(1);
             continue;
         }
         else if (context.operatorStrcat() != null)
         {
             WriteExp(context.exp(0));
             WriteImmediately($"{context.operatorStrcat().GetText()}");
             context = context.exp(1);
             continue;
         }
         else if (context.number() != null)
         {
             WriteExp(context.number());
         }
         else if (context.ifexp() != null)
         {
             WriteIfExp(context.ifexp());
         }
         else if (context.OpFullApply() != null)
         {
             var c1 = context.exp(0);
             var c2 = context.exp().Skip(1);
             WriteFullApply(c1, c2);
         }
         else if (context.OpParApply().Length is not 0)
         {
             var c1 = context.exp(0);
             var c2 = context.exp().Skip(1);
             WritePartialApply(c1, c2);
         }
         else if (context.OpRComp().Length != 0)
         {
             WriteRightCompose(context.exp());
         }
         else
         {
             CopySource(context);
         }
         break;
     }
 }