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); }
public Symbol Clone(Block parentBlock) { Symbol res = new Assemble.Symbol() { AssemblePosition = this.AssemblePosition, Name = this.Name, DefinedBlock = parentBlock, Content = Content.Clone(parentBlock) }; return(res); }