public Set(AsmRegisters reg, uint value) { this.reg = reg; this.value = value; }
public DecReg(AsmRegisters reg) { this.reg = reg; }
public CmpRI(AsmRegisters reg, byte value) { this.reg = reg; this.value = value; }
public WriteVB(AsmRegisters reg, byte value) { this.reg = reg; this.value = value; }
public WriteR(AsmRegisters reg1, AsmRegisters reg) { this.reg1 = reg1; this.reg = reg; }
public WriteReg(uint address, AsmRegisters reg) { this.address = address; this.reg = reg; }
public Block parseBlock() { List <Node> nodes = new List <Node>(); while (Peek().Type != TokenType.ClosedCurly) { if (Peek().Type == TokenType.NOP) { Read(); nodes.Add(new Nop()); } else if (Peek().Type == TokenType.WRITE && Peek(1).Type == TokenType.IntLiteral && canBeNumber(Peek(3).Type)) { Read(); uint address = getValue(Read()); Read(); byte value = (byte)getValue(Read()); nodes.Add(new WriteB(address, value)); } else if (Peek().Type == TokenType.SET && Peek(1).Type == TokenType.Register && canBeNumber(Peek(3).Type)) { Read(); AsmRegisters reg = (AsmRegisters)Enum.Parse(typeof(AsmRegisters), Read().Value); Read(); uint value = getValue(Read()); nodes.Add(new Set(reg, value)); } else if (Peek().Type == TokenType.WRITE && isRef(Peek(1)) && isRef(Peek(4))) { Read(); Read(); AsmRegisters reg = (AsmRegisters)Enum.Parse(typeof(AsmRegisters), Read().Value); Read(); Read(); AsmRegisters reg1 = (AsmRegisters)Enum.Parse(typeof(AsmRegisters), Read().Value); nodes.Add(new WriteR(reg, reg1)); } else if (Peek().Type == TokenType.WRITE && isRef(Peek(1)) && canBeNumber(Peek(4).Type)) { Read(); Read(); AsmRegisters reg = (AsmRegisters)Enum.Parse(typeof(AsmRegisters), Read().Value); Read(); byte value = (byte)getValue(Read()); nodes.Add(new WriteVB(reg, value)); } else if (Peek().Type == TokenType.WRITE && Peek(1).Type == TokenType.IntLiteral && isRef(Peek(3))) { Read(); uint address = getValue(Read()); Read(); Read(); AsmRegisters reg = (AsmRegisters)Enum.Parse(typeof(AsmRegisters), Read().Value); nodes.Add(new WriteReg(address, reg)); } else if (Peek().Type == TokenType.INC && Peek(1).Type == TokenType.Register) { Read(); AsmRegisters reg = (AsmRegisters)Enum.Parse(typeof(AsmRegisters), Read().Value); nodes.Add(new IncReg(reg)); } else if (Peek().Type == TokenType.DEC && Peek(1).Type == TokenType.Register) { Read(); AsmRegisters reg = (AsmRegisters)Enum.Parse(typeof(AsmRegisters), Read().Value); nodes.Add(new DecReg(reg)); } else if (Peek().Type == TokenType.JMP && Peek(1).Type == TokenType.Label) { Read(); string label = Read().Value; nodes.Add(new Jmp(label)); } else if (Peek().Type == TokenType.CMP && isRef(Peek(1)) && canBeNumber(Peek(4).Type)) { Read(); Read(); AsmRegisters reg = (AsmRegisters)Enum.Parse(typeof(AsmRegisters), Read().Value); Read(); byte value = (byte)getValue(Read()); nodes.Add(new CmpRI(reg, value)); } else if (Peek().Type == TokenType.JE && Peek(1).Type == TokenType.Label) { Read(); string label = Read().Value; nodes.Add(new JE(label)); } else if (Peek().Type == TokenType.JG && Peek(1).Type == TokenType.Label) { Read(); string label = Read().Value; nodes.Add(new JG(label)); } else if (Peek().Type == TokenType.HLT) { Read(); nodes.Add(new Hlt()); } } return(new Block(nodes)); }