##// END OF EJS Templates
Added Skip method to JSON parser to skip contents of the current node
Added Skip method to JSON parser to skip contents of the current node

File last commit:

r62:62b440d46313 default
r62:62b440d46313 default
Show More
DFAutomaton.cs
56 lines | 1.9 KiB | text/x-csharp | CSharpLexer
cin
Added initial JSON support...
r55 using Implab;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Implab.Parsing {
public abstract class DFAutomaton<T> {
protected struct ContextFrame {
public DFAStateDescriptior[] states;
public int current;
public T info;
}
public const int INITIAL_STATE = DFADefinitionBase.INITIAL_STATE;
public const int UNREACHEBLE_STATE = DFADefinitionBase.UNREACHEBLE_STATE;
protected ContextFrame m_context;
Stack<ContextFrame> m_contextStack = new Stack<ContextFrame>();
cin
Added Skip method to JSON parser to skip contents of the current node
r62 protected int Level {
cin
Added initial JSON support...
r55 get { return m_contextStack.Count; }
}
protected DFAutomaton(DFAStateDescriptior[] states, int startState, T info) {
Safe.ArgumentNotNull(states, "states");
Safe.ArgumentInRange(startState, 0, states.Length - 1, "startState");
m_context.states = states;
m_context.current = startState;
m_context.info = info;
}
protected void Switch(DFAStateDescriptior[] states, int current, T info) {
Debug.Assert(states != null);
Debug.Assert(current >= 0 && current < states.Length);
m_contextStack.Push(m_context);
m_context. states = states;
m_context.current = current;
m_context.info = info;
}
protected void Restore() {
Debug.Assert(m_contextStack.Count > 0);
m_context = m_contextStack.Pop();
}
protected void Move(int input) {
Debug.Assert(input > 0 && input < m_context.states[m_context.current].transitions.Length);
m_context.current = m_context.states[m_context.current].transitions[input];
}
}
}