示例#1
0
        public LiteValue Visit(SyntaxIndexElementsExpressionNode Node, LiteEnv Env)
        {
            var Val = Node.GetElementIdentNode().Accept(this, Env);

            if (Val.Type == LiteValueType.Elements)
            {
                var EleObj = ElementsTable.GetElements((int)Val.Numeric);
                if (EleObj == null)
                {
                    Logger.DError($"bad elements access : {Val}");
                    return(LiteValue.Error);
                }

                var Idx = Node.GetIndexNode().Accept(this, Env);
                if (Idx.Type != LiteValueType.Numeric)
                {
                    Logger.DError($"elements index must be number");
                    return(LiteValue.Error);
                }

                return(EleObj.Get((int)Idx.Numeric));
            }
            else
            {
                Logger.DError($"unknown elements type : {Val}");
            }

            return(LiteValue.Error);
        }
示例#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)));
        }
 private void OK_Click(object sender, EventArgs e)
 {
     for (int i = 0; i < 4; i++)
     {
         if (ElementsTable.GetControlFromPosition(0, i).Text == "" || ElementsTable.GetControlFromPosition(0, i).Text == ElementsTable.GetControlFromPosition(0, i).Tag.ToString())
         {
             ElementsTable.GetControlFromPosition(0, i).Text = ElementsTable.GetControlFromPosition(0, i).Name.Last().ToString();
         }
     }
     //parent.GetStringProgram(ElementsTable.Controls[0].Text, ElementsTable.Controls[2].Text, ElementsTable.Controls[4].Text, ElementsTable.Controls[6].Text);
     Close();
 }
示例#4
0
        public LiteValue Visit(SyntaxAssignmentExpressionNode Node, LiteEnv Env)
        {
            var LeftNode = Node.GetLeft();

            if (LeftNode.GetType() == SyntaxNodeType.Identifier)
            {
                var Ident = (LeftNode as SyntaxIdentifierNode).GetValue();

                var Val = Node.GetRight().Accept(this, Env);
                Env.Set(Ident, Val);
                return(Val);
            }
            if (LeftNode.GetType() == SyntaxNodeType.DotClassExpression)
            {
                var DotNode    = LeftNode as SyntaxDotClassExpressionNode;
                var Mem        = DotNode.GetCallIdentNode() as SyntaxIdentifierNode;
                var LiteObjVal = DotNode.GetClassIdentNode().Accept(this, Env);
                if (LiteObjVal.Type != LiteValueType.Object)
                {
                    Logger.DError($"bad object access : {LiteObjVal}");
                    return(LiteValue.Error);
                }

                var LiteObj = ObjectTable.GetObject((int)LiteObjVal.Numeric);
                if (LiteObj == null)
                {
                    Logger.DError($"bad object access : {LiteObjVal}");
                    return(LiteValue.Error);
                }

                var ExpVal = Node.GetRight().Accept(this, Env);
                if (ExpVal == LiteValue.Error)
                {
                    return(ExpVal);
                }

                return(LiteObj.Write(Mem.GetValue(), ExpVal));
            }

            if (LeftNode.GetType() == SyntaxNodeType.IndexElementsExpression)
            {
                var IdxNode = LeftNode as SyntaxIndexElementsExpressionNode;
                var Val     = IdxNode.GetElementIdentNode().Accept(this, Env);
                if (Val.Type == LiteValueType.Elements)
                {
                    var EleObj = ElementsTable.GetElements((int)Val.Numeric);
                    if (EleObj == null)
                    {
                        Logger.DError($"bad elements access : {Val}");
                        return(LiteValue.Error);
                    }

                    var Idx = IdxNode.GetIndexNode().Accept(this, Env);
                    if (Idx.Type != LiteValueType.Numeric)
                    {
                        Logger.DError($"elements index must be number");
                        return(LiteValue.Error);
                    }

                    var ExpVal = Node.GetRight().Accept(this, Env);
                    if (ExpVal == LiteValue.Error)
                    {
                        return(ExpVal);
                    }

                    return(EleObj.Set((int)Idx.Numeric, ExpVal));
                }
                else
                {
                    Logger.DError($"unknown elements type : {Val}");
                }
            }

            Logger.DError($"unexpected '=' near {Node.GetLeft()}");
            return(LiteValue.Error);
        }
        private void FormulaReset_Click(object sender, EventArgs e)
        {
            Button Btn = sender as Button;

            ElementsTable.GetControlFromPosition(0, ElementsTable.GetPositionFromControl(Btn).Row).Text = ElementsTable.GetControlFromPosition(0, ElementsTable.GetPositionFromControl(Btn).Row).Tag.ToString();
        }