Beispiel #1
0
        private bool ParseSymbol(ParseTreeNode node, Block block, out Symbol res)
        {
            res = new Assemble.Symbol();
            res.AssemblePosition = new Assemble.AssemblePosition(this.ParsingFilePath, node);
            res.DefinedBlock     = block;
            { //.symbol + name + = + content + ;
                res.Name = node.ChildNodes[1].ChildNodes[0].Token.Text;

                var contentNode = node.ChildNodes[3];
                if (contentNode.ChildNodes[0].Term.Name == "operand-register")
                {
                    if (!ParseRegisterInfo(contentNode.ChildNodes[0], block, out res.Content))
                    {
                        return(false);
                    }
                }
                else if (contentNode.ChildNodes.Count == 2)
                { //@ + number
                    res.Content = new ValueInteger((int)contentNode.ChildNodes[1].Token.Value);
                }
                else
                { //Immediate
                    if (!ParseImmediateValue(contentNode.ChildNodes[0], block, out res.Content))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
Beispiel #2
0
        public Symbol Clone(Block parentBlock)
        {
            Symbol res = new Assemble.Symbol()
            {
                AssemblePosition = this.AssemblePosition,
                Name             = this.Name,
                DefinedBlock     = parentBlock,
                Content          = Content.Clone(parentBlock)
            };

            return(res);
        }