示例#1
0
        public static bool Print(LiteEnv Env)
        {
            var ParamCount = (int)(Env.Pop().Numeric);

            if (ParamCount == 0)
            {
                Logger.DInfo(string.Empty);
            }
            else if (ParamCount == 1)
            {
                Logger.DInfo($"Print => {Env.Pop()}");
            }
            else
            {
                var Params = new LiteValue[ParamCount - 1];
                for (var Index = 0; Index < ParamCount - 1; ++Index)
                {
                    Params[Index] = Env.Pop();
                }

                var Text = new StringBuilder(Env.Pop().ToString());

                for (var Index = 0; Index < ParamCount - 1; ++Index)
                {
                    Text = Text.Replace($"{{{Index}}}", Params[Index].ToString());
                }

                Logger.DInfo($"Print => {Text}");
            }

            return(false);
        }
示例#2
0
        public LiteValue Visit(SyntaxElementsStatementNode Node, LiteEnv Env)
        {
            var Eles = new LiteValue[Node.GetChildrenNum()];

            for (var Index = 0; Index < Eles.Length; ++Index)
            {
                Eles[Index] = Node.GetChild(Index).Accept(this, Env);
            }

            return(ElementsTable.AddElementsEx(new Elements(Eles)));
        }
示例#3
0
 public void Push(LiteValue Val)
 {
     Env_.Push(Val);
 }
示例#4
0
 public SyntaxStringLiteralNode(Token Tok)
     : base(Tok)
 {
     Value_ = new LiteValue(LiteValueType.String, StringTable.AddString(Tok.Code));
 }
示例#5
0
 public SyntaxNumericLiteralNode(Token Tok)
     : base(Tok)
 {
     Value_ = new LiteValue(LiteValueType.Numeric, float.Parse(Tok.Code));
 }
示例#6
0
 public SyntaxLiteralNode(Token Tok)
     : base(Tok)
 {
     Value_ = LiteValue.Nil;
 }
示例#7
0
 public SyntaxBooleanLiteralNode(Token Tok)
     : base(Tok)
 {
     Value_ = new LiteValue(LiteValueType.Boolean, bool.Parse(Tok.Code) ? 1 : 0);
 }