public static Instruction Parse(String parseFrom) { var r = new Instruction(); var annotationPoint = parseFrom.IndexOf('#'); if (annotationPoint >= 0) { r.Annotation = parseFrom.Substring(annotationPoint + 1); parseFrom = parseFrom.Substring(0, annotationPoint); } var parts = parseFrom.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); r.Opcode = (Enum.Parse(typeof(InstructionSet), parts[0]) as InstructionSet?).Value; r.FirstOperand = r.SecondOperand = r.ThirdOperand = Operand.NONE; if (parts.Length >= 2) r.FirstOperand = (Enum.Parse(typeof(Operand), parts[1]) as Operand?).Value; if (parts.Length >= 3) r.SecondOperand = (Enum.Parse(typeof(Operand), parts[2]) as Operand?).Value; if (parts.Length >= 4) r.ThirdOperand = (Enum.Parse(typeof(Operand), parts[3]) as Operand?).Value; return r; }
public RuntimeError(string msg, Instruction at) : base(msg) { }
public RuntimeError(ExecutionContext context, string msg, Instruction at) : base(msg) { }
private int CountLiteralOperands(Instruction Instruction) { int literals = 0; if (ExpectLiteral(Instruction.FirstOperand)) ++literals; if (ExpectLiteral(Instruction.SecondOperand)) ++literals; if (ExpectLiteral(Instruction.ThirdOperand)) ++literals; return literals; }