distinguish lifetimes of the state table from the underlying grammar

This commit is contained in:
Niko Matsakis 2015-06-20 06:03:15 -04:00
parent a661d9ee94
commit 5c71e53c6b

View File

@ -11,22 +11,21 @@ pub enum ParseTree {
Terminal(TerminalString), Terminal(TerminalString),
} }
pub fn interpret<'g,TOKENS>(states: &'g [State<'g>], tokens: TOKENS) pub fn interpret<TOKENS>(states: &[State], tokens: TOKENS) -> Result<ParseTree, ()>
-> Result<ParseTree, ()>
where TOKENS: Iterator<Item=TerminalString> where TOKENS: Iterator<Item=TerminalString>
{ {
let mut m = Machine::new(states); let mut m = Machine::new(states);
m.execute(tokens) m.execute(tokens)
} }
struct Machine<'grammar> { struct Machine<'states, 'grammar:'states> {
states: &'grammar [State<'grammar>], states: &'states [State<'grammar>],
state_stack: Vec<&'grammar State<'grammar>>, state_stack: Vec<&'states State<'grammar>>,
data_stack: Vec<ParseTree>, data_stack: Vec<ParseTree>,
} }
impl<'grammar> Machine<'grammar> { impl<'states, 'grammar> Machine<'states, 'grammar> {
fn new(states: &'grammar [State<'grammar>]) -> Machine<'grammar> { fn new(states: &'states [State<'grammar>]) -> Machine<'states,'grammar> {
Machine { states: states, Machine { states: states,
state_stack: vec![], state_stack: vec![],
data_stack: vec![] } data_stack: vec![] }