public SVRule(List <IOpCode> opCodes) { if (opCodes.First().GetType() == typeof(End)) { Head = opCodes.First(); return; } Stack <IOpCode> Operators = new Stack <IOpCode>(); Stack <IOpCode> Operands = new Stack <IOpCode>(); Stack <IOpCode> Outputs = new Stack <IOpCode>(); foreach (var Code in opCodes) { if (Code.GetType() == typeof(End)) { break; } if (!Code.IsOperator()) { Operands.Push(Code); } else { Operators.Push(Code); } if (Operators.Count > 0 && Operands.Count >= Operators.Peek().OperandsRequired()) { var Op = Operators.Pop(); Op.Children = Enumerable.Range(0, Op.OperandsRequired()).Select(i => Operands.Pop()).Reverse().ToList(); Operands.Push(Op); } } if (Outputs.Count > 0) { Head = new Evaluator { Children = Outputs.Concat(Operands).ToList() }; } else { Head = Operands.Pop(); } }
public void UpdateOpCodeText() { if (_opCodes == null) { opCodeText.text = string.Empty; return; } var builder = new StringBuilder(); for (var i = 0; i < _opCodes.Length; i++) { IOpCode opCode = _opCodes[i]; string opCodeTrueStr = opCode.ToString(); string opCodeStr = Regex.Replace(opCodeTrueStr, @"^([a-zA-Z]+)(.*)$", $@"<size=70%>{i}</size><indent=20><b>$1</b><color=#999><i>$2</i></color></indent>"); int open = opCodeStr.IndexOf('{'); if (open != -1) { int close = opCodeStr.LastIndexOf('}'); int len = close - open; opCodeStr = opCodeStr.Substring(0, open + 1) + IDEColorCoding.RunColorCode(opCodeStr.Substring(open + 1, len - 1)) + opCodeStr.Substring(close); } if (i == 0 && _processor?.ProgramCounter == -1) { builder.AppendLine($"<color=#{ColorUtility.ToHtmlStringRGBA(nextOpCodeColor)}>{opCodeStr}</color>"); } else if (i == _processor?.ProgramCounter) { builder.AppendLine($"<color=#{ColorUtility.ToHtmlStringRGBA(currentOpCodeColor)}>{opCodeStr}</color>"); } else { builder.AppendLine(opCodeStr); } } opCodeText.text = builder.ToString(); }
public AssemblyStatement(IOpCode opCode, IEnumerable <IOperand> operands) { OpCode = opCode; Operands = operands; }
public AssemblyStatement(IOpCode opCode) { OpCode = opCode; }
private static void AddOpCode(IOpCode code) { _allOpCodes.Add(code.Name, code); }
public void setStrategy(IOpCode argStrategy) { strategy = argStrategy; }
public Context(IOpCode argStrategy) { strategy = argStrategy; }