public virtual void EvaluateUserTerm(ForthState state) { foreach (var definition in state.Mapping[Term]) { definition.Evaluate(state); } }
public override void EvaluateDefaultTerm(ForthState state) { if (!state.Mapping.ContainsKey(Term)) { throw new InvalidOperationException(); } }
public override void EvaluateDefaultTerm(ForthState state) { if (!state.Mapping.ContainsKey(Term)) { throw new ForthException(ForthError.UnknownWord); } }
private ForthState() { if (_instance != null) { return; } _instance = this; }
public override void Evaluate(ForthState state) { if (IsUserTerm(state)) { EvaluateUserTerm(state); } else { EvaluateDefaultTerm(state); } }
public override void Evaluate(ForthState state) { int result; if (int.TryParse(term, out result)) { throw new ForthException(ForthError.InvalidWord); } state.Mapping[term] = actions; }
public static string Eval(string input) { var expression = Expression.Parse(input); var state = new ForthState(); foreach (var definition in expression) { definition.Evaluate(state); } return(state.ToString()); }
public override void EvaluateDefaultTerm(ForthState state) { if (state.Stack.Count < 1) { throw new InvalidOperationException(); } var operand = state.Stack.Pop(); foreach (var value in operation(operand)) { state.Stack.Push(value); } }
public override void EvaluateDefaultTerm(ForthState state) { if (state.Stack.Count <= 1) { throw new ForthException(ForthError.StackUnderflow); } var operand2 = state.Stack.Pop(); var operand1 = state.Stack.Pop(); foreach (var value in operation(operand1, operand2)) { state.Stack.Push(value); } }
public static string Evaluate(string[] instructions) { var state = new ForthState(); foreach (var instruction in instructions) { var expression = Expression.Parse(instruction); foreach (var definition in expression) { definition.Evaluate(state); } } return(state.ToString()); }
public override void Evaluate(ForthState state) { if (int.TryParse(term, out _)) { throw new InvalidOperationException(); } var normalizedActions = new List <ForthDefinition>(); foreach (var action in actions) { if (action is Word word) { normalizedActions.AddRange(state.Mapping[word.Term]); } else { normalizedActions.Add(action); } } state.Mapping[term] = normalizedActions; }
public abstract void EvaluateDefaultTerm(ForthState state);
private bool IsUserTerm(ForthState state) => state.Mapping.ContainsKey(Term);
public abstract void Evaluate(ForthState state);
public override void Evaluate(ForthState state) => state.Stack.Push(n);