Пример #1
0
    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();
        }
    }
Пример #2
0
    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;
 }
Пример #5
0
 private static void AddOpCode(IOpCode code)
 {
     _allOpCodes.Add(code.Name, code);
 }
Пример #6
0
 public void setStrategy(IOpCode argStrategy)
 {
     strategy = argStrategy;
 }
Пример #7
0
 public Context(IOpCode argStrategy)
 {
     strategy = argStrategy;
 }