extern crate gramatica;
use std::cmp::Ordering;
use gramatica::{Associativity,EarleyKind,State,Parser,ParsingTablesTrait};
use std::env;
use std::fs::File;
use std::io::prelude::*;
use std::rc::Rc;
use std::collections::HashMap;
use std::fmt::{self,Display,Formatter};
#[derive(Clone,Debug,PartialEq)]
enum PatKind
{
Underscore,
Ref(Rc<PatKind>),
RefMut(Rc<PatKind>),
Void,
Tuple(Rc<Token>),
Path(Rc<Token>),
EnumEmpty(Rc<Token>),
Enum(Rc<Token>,Rc<Token>),}
#[derive(Clone,Debug,PartialEq)]
enum TyKind
{
Underscore,
Ref(Rc<TyKind>),
RefMut(Rc<TyKind>),
Void,
Path(String),
}
#[derive(Clone,Debug,PartialEq)]
enum ExprKind
{
Single(Rc<Token>),
Member(Rc<ExprKind>,String), Index(Rc<ExprKind>,Option<Rc<ExprKind>>), Call(Rc<ExprKind>,Vec<ExprKind>), Parentheses(Vec<ExprKind>),
Infix(Rc<ExprKind>,Rc<Token>,Rc<ExprKind>), Ref(Rc<ExprKind>),
RefMut(Rc<ExprKind>),
Prefix(Rc<Token>,Rc<ExprKind>),}
#[derive(Clone,Debug,PartialEq)]
enum StmtKind
{
Item(Vec<AttrKind>,Rc<Token>), Block(Vec<AttrKind>,Rc<Token>), Expr(Vec<AttrKind>,ExprKind), Empty,
}
#[derive(Clone,Debug,PartialEq)]
enum AttrKind
{
Documentation(String),
Flag(String),
Value(String,Rc<Token>),
Sequence(String,Vec<AttrKind>),
}
#[derive(Clone,Debug,PartialEq)]
enum Token
{
DummyStart, FN, Mut, Match, If, Else, While, Loop, For, In, Terminal, Nonterminal, OuterDocComment(String), LiteralIdent(String), LitStr(String), LitChar(char), LitInteger(usize), RArrow, FatArrow, EqualEqual, LPar, RPar, Dot, Comma, Colon, Underscore, Ampersand, NumberSign, Minus, Bang, Semicolon, LBrace, RBrace, LBracket, RBracket, Equal, Star, Plus,
WholeCrate(Vec<Rc<Token>>), MaybeModItems(Vec<Rc<Token>>), ModItems(Vec<Rc<Token>>), ModItem(Vec<AttrKind>,Rc<Token>), Item(Rc<Token>), StmtItem(Rc<Token>), BlockItem(Rc<Token>), ItemMacro(Rc<Token>,Option<Rc<Token>>,Rc<Token>), PathExpr(String), PathGenericArgsWithColons(String), Ident(String), ItemFn, FnDecl, FnParams, MaybeParams, Params, Param, Pat(PatKind), LitOrPath(String), Lit(Rc<Token>), Str, MaybeIdent, DelimitedTokenTrees(Vec<Rc<Token>>), ParensDelimitedTokenTrees(Vec<Rc<Token>>), TokenTrees(Vec<Rc<Token>>), TokenTree(Rc<Token>), UnpairedToken(Rc<Token>), InnerAttrsAndBlock, MaybeStmts(Vec<StmtKind>,Option<ExprKind>), Stmts(Vec<StmtKind>), Stmt(StmtKind), MaybeOuterAttrs(Vec<AttrKind>), OuterAttrs(Vec<AttrKind>), OuterAttr(AttrKind), MetaItem(AttrKind), MetaSeq(Vec<AttrKind>), RetTy, Ty(TyKind), TyPrim(TyKind), PathGenericArgsWithoutColons(String), TySum(TyKind), TySumElt(TyKind), PatTup(Vec<Rc<Token>>), PatTupElts(Vec<Rc<Token>>), NonblockExpr(ExprKind), NonblockPrefixExpr(ExprKind), MaybeMut(bool), FullBlockExpr(Rc<Token>), BlockExpr(Rc<Token>), ExprMatch, ExprNostruct, Block(Vec<StmtKind>,Option<ExprKind>), NonblockPrefixExprNostruct, MacroExpr, MaybeExpr(Option<ExprKind>), Expr(ExprKind), MaybeExprs(Vec<ExprKind>), Exprs(Vec<ExprKind>), ExprIf, BlockOrIf, ExprWhile, ExprLoop, ExprFor, MatchClauses(Vec<Rc<Token>>), MatchClause(Vec<AttrKind>,Rc<Token>,Rc<Token>), NonblockMatchClause(Vec<AttrKind>,Rc<Token>,Rc<Token>), BlockMatchClause(Vec<AttrKind>,Rc<Token>,Rc<Token>), PatsOr(Rc<Token>), MaybeGuard, ItemTerminal(String,Option<Rc<Token>>,Vec<Rc<Token>>), MaybeTerminalItems(Vec<Rc<Token>>), TerminalItems(Vec<Rc<Token>>), TerminalItem(Rc<Token>), ItemNonterminal(String,Option<Rc<Token>>,Vec<Rc<Token>>), MaybeTySums(Vec<Rc<Token>>), TySums(Vec<Rc<Token>>),}
impl Default for Token
{
fn default() -> Self
{
Token::DummyStart
}
}
impl Display for PatKind
{
fn fmt(&self, f:&mut Formatter) -> fmt::Result
{
match self
{
&PatKind::Underscore => write!(f,"_"),
&PatKind::Ref(ref kind) => write!(f,"& {}",kind),
&PatKind::RefMut(ref kind) => write!(f,"&mut {}",kind),
&PatKind::Void => write!(f,"()"),
&PatKind::Tuple(ref token) => write!(f,"({})",token),
&PatKind::Path(ref token) => write!(f,"{}",token),
&PatKind::EnumEmpty(ref name) => write!(f,"{}",name),
&PatKind::Enum(ref name, ref tuple) => write!(f,"{}({})",name,tuple),
}
}
}
impl Display for TyKind
{
fn fmt(&self, f:&mut Formatter) -> fmt::Result
{
match self
{
&TyKind::Underscore => write!(f,"_"),
&TyKind::Ref(ref kind) => write!(f,"& {}",kind),
&TyKind::RefMut(ref kind) => write!(f,"&mut {}",kind),
&TyKind::Void => write!(f,"()"),
&TyKind::Path(ref string) => write!(f,"{}",string),
}
}
}
impl Display for ExprKind
{
fn fmt(&self, f:&mut Formatter) -> fmt::Result
{
match self
{
&ExprKind::Single(ref token) => write!(f,"{}",token),
&ExprKind::Member(ref kind, ref path) => write!(f,"{}.{}",kind,path),
&ExprKind::Index(ref object, None) => write!(f,"{}[]",object),
&ExprKind::Index(ref object, Some(ref index)) => write!(f,"{}[{}]",object,index),
&ExprKind::Call(ref function, ref arguments) => write!(f,"{}({})",function,arguments.iter().map(|x| x.to_string() ).collect::<Vec<String>>().join(",")),
&ExprKind::Parentheses(ref list) => write!(f,"({})",list.iter().map(|x| x.to_string() ).collect::<Vec<String>>().join(",")),
&ExprKind::Infix(ref left,ref symbol,ref right) => write!(f,"{} {} {}",left,symbol,right),
&ExprKind::Ref(ref expr) => write!(f,"&{}",expr),
&ExprKind::RefMut(ref expr) => write!(f,"&mut {}",expr),
&ExprKind::Prefix(ref symbol, ref expr) => write!(f,"{} {}",symbol,expr),
}
}
}
impl Display for StmtKind
{
fn fmt(&self, f:&mut Formatter) -> fmt::Result
{
match self
{
&StmtKind::Item(ref attrs, ref token) => write!(f,"{};",token),
&StmtKind::Block(ref attrs, ref token) => write!(f,"{};",token),
&StmtKind::Expr(ref attrs, ref token) => write!(f,"{};",token),
&StmtKind::Empty => write!(f,";"),
}
}
}
impl Display for Token
{
fn fmt(&self, f:&mut Formatter) -> fmt::Result
{
match self
{
&Token::TySum(ref kind) => write!(f,"{}",kind),
&Token::Pat(ref kind) => write!(f,"{}",kind),
&Token::LitOrPath(ref string) => write!(f,"{}",string),
&Token::NonblockExpr(ref expr) => write!(f,"{}",expr),
&Token::PathExpr(ref string) => write!(f,"{}",string),
&Token::Block(ref stmts, None) => write!(f,"{{{}}}", stmts.iter().map(|s| s.to_string() ).collect::<Vec<String>>().join("\n") ),
&Token::Block(ref stmts, Some(ref expr)) => write!(f,"{{{}; {}}}", stmts.iter().map(|s| s.to_string() ).collect::<Vec<String>>().join("\n") , expr),
&Token::Equal => write!(f," = "),
&Token::Lit(ref token) => write!(f,"{}",token),
&Token::LitInteger(x) => write!(f,"{}",x),
&Token::Str => write!(f,"\"some Str\""),
&Token::BlockExpr(ref token) => write!(f,"{}",token),
&Token::ExprMatch => write!(f,"match FIXME {{ }}"),
&Token::ExprIf => write!(f,"if FIXME {{ }}"),
_ => panic!("panic displaying {:?}",self),
}
}
}
struct ParsingTables {}
impl ParsingTablesTrait<Token> for ParsingTables
{
fn initial()->usize
{
38
}
fn match_some(parser: &mut Parser<Token,Self>) -> Option<(usize,Token)>
{
let source=&parser.source[parser.source_index..];
match
{
match parser.re("fn", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::FN)),
};
match
{
match parser.re("mut", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Mut)),
};
match
{
match parser.re("match", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Match)),
};
match
{
match parser.re("if", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::If)),
};
match
{
match parser.re("else", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Else)),
};
match
{
match parser.re("while", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::While)),
};
match
{
match parser.re("loop", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Loop)),
};
match
{
match parser.re("for", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::For)),
};
match
{
match parser.re("in", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::In)),
};
match
{
match parser.re("terminal", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Terminal)),
};
match
{
match parser.re("nonterminal", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Nonterminal)),
};
match
{
match parser.re("\\\\\\[^\n]*\n", source)
{
None => None,
Some((size,string)) => Some((size,string)),
}
}
{
None => (),
Some((size,result)) => return Some((size,Token::OuterDocComment(result))),
};
match
{
match parser.re("[a-zA-Z\\x80-\\xff_][a-zA-Z0-9\\x80-\\xff_]*", source)
{
None => None,
Some((size,string)) => Some((size,string)),
}
}
{
None => (),
Some((size,result)) => return Some((size,Token::LiteralIdent(result))),
};
match
{
let mut ret=None;
let mut characters=source.chars();
if characters.next()!=Some('"')
{
}
else
{
let mut size=1;
let mut r=String::from("\"");
loop
{
match characters.next()
{
None => break,
Some('"') =>
{
ret=Some((size+1,r+&"\""));
break;
},
Some('\\') =>
{
match characters.next()
{
None => break,
Some(c) =>
{
r.push('\\');
r.push(c);
}
};
size+=2;
},
Some(c) =>
{
r.push(c);
size+=1;
},
};
}
}
ret
}
{
None => (),
Some((size,result)) => return Some((size,Token::LitStr(result))),
};
match
{
match parser.re("'\\?.'", source)
{
None => None,
Some((size,string)) => Some((size,string.parse::<char>().unwrap())),
}
}
{
None => (),
Some((size,result)) => return Some((size,Token::LitChar(result))),
};
match
{
match parser.re("[0-9]+", source)
{
None => None,
Some((size,string)) => Some((size,string.parse::<usize>().unwrap())),
}
}
{
None => (),
Some((size,result)) => return Some((size,Token::LitInteger(result))),
};
match
{
match parser.re("->", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::RArrow)),
};
match
{
match parser.re("=>", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::FatArrow)),
};
match
{
match parser.re("==", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::EqualEqual)),
};
match
{
match parser.re("\\(", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::LPar)),
};
match
{
match parser.re("\\)", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::RPar)),
};
match
{
match parser.re("\\.", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Dot)),
};
match
{
match parser.re(",", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Comma)),
};
match
{
match parser.re(":", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Colon)),
};
match
{
match parser.re("_", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Underscore)),
};
match
{
match parser.re("&", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Ampersand)),
};
match
{
match parser.re("#", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::NumberSign)),
};
match
{
match parser.re("-", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Minus)),
};
match
{
match parser.re("!", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Bang)),
};
match
{
match parser.re(";", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Semicolon)),
};
match
{
match parser.re("\\{", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::LBrace)),
};
match
{
match parser.re("\\}", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::RBrace)),
};
match
{
match parser.re("\\[", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::LBracket)),
};
match
{
match parser.re("\\]", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::RBracket)),
};
match
{
match parser.re("=", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Equal)),
};
match
{
match parser.re("\\*", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Star)),
};
match
{
match parser.re("\\+", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::Plus)),
};
match
{
match parser.re("\\s+|\n|\\\\[^\n]*\n", source)
{
None => None,
Some((size,_string)) => Some((size,())),
}
}
{
None => (),
Some((size,_result)) => return Some((size,Token::DummyStart)),
};
None
}
fn predict(parser:&mut Parser<Token,Self>,index:usize,state_index:usize,token:usize)
{
match token
{
38 =>
{
parser.sets[index].predict(State{rule: 1 ,left: 38 ,right:vec![ 39 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
39 =>
{
parser.sets[index].predict(State{rule: 2 ,left: 39 ,right:vec![ 40 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 3 ,left: 39 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
40 =>
{
parser.sets[index].predict(State{rule: 4 ,left: 40 ,right:vec![ 41 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 5 ,left: 40 ,right:vec![ 40,41 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
41 =>
{
parser.sets[index].predict(State{rule: 6 ,left: 41 ,right:vec![ 69,42 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
42 =>
{
parser.sets[index].predict(State{rule: 7 ,left: 42 ,right:vec![ 43 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 8 ,left: 42 ,right:vec![ 45 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
43 =>
{
parser.sets[index].predict(State{rule: 9 ,left: 43 ,right:vec![ 44 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
44 =>
{
parser.sets[index].predict(State{rule: 10 ,left: 44 ,right:vec![ 49 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 193 ,left: 44 ,right:vec![ 107 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 194 ,left: 44 ,right:vec![ 111 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
45 =>
{
parser.sets[index].predict(State{rule: 11 ,left: 45 ,right:vec![ 46,29,59,61,30 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
},
46 =>
{
parser.sets[index].predict(State{rule: 12 ,left: 46 ,right:vec![ 47 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
47 =>
{
parser.sets[index].predict(State{rule: 13 ,left: 47 ,right:vec![ 48 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
48 =>
{
parser.sets[index].predict(State{rule: 14 ,left: 48 ,right:vec![ 13 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
49 =>
{
parser.sets[index].predict(State{rule: 15 ,left: 49 ,right:vec![ 1,48,50,65 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
},
50 =>
{
parser.sets[index].predict(State{rule: 16 ,left: 50 ,right:vec![ 51,74 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
51 =>
{
parser.sets[index].predict(State{rule: 17 ,left: 51 ,right:vec![ 20,52,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
52 =>
{
parser.sets[index].predict(State{rule: 18 ,left: 52 ,right:vec![ 53 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 19 ,left: 52 ,right:vec![ 53,23 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 20 ,left: 52 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
53 =>
{
parser.sets[index].predict(State{rule: 21 ,left: 53 ,right:vec![ 54 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 22 ,left: 53 ,right:vec![ 53,23,54 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
54 =>
{
parser.sets[index].predict(State{rule: 23 ,left: 54 ,right:vec![ 55,24,78 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
55 =>
{
parser.sets[index].predict(State{rule: 24 ,left: 55 ,right:vec![ 25 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 25 ,left: 55 ,right:vec![ 26,55 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 26 ,left: 55 ,right:vec![ 26,2,55 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 27 ,left: 55 ,right:vec![ 20,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 195 ,left: 55 ,right:vec![ 20,80,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 28 ,left: 55 ,right:vec![ 56 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 29 ,left: 55 ,right:vec![ 46,20,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 30 ,left: 55 ,right:vec![ 46,20,80,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
},
56 =>
{
parser.sets[index].predict(State{rule: 31 ,left: 56 ,right:vec![ 46 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 32 ,left: 56 ,right:vec![ 57 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 33 ,left: 56 ,right:vec![ 28,57 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
57 =>
{
parser.sets[index].predict(State{rule: 34 ,left: 57 ,right:vec![ 15 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 35 ,left: 57 ,right:vec![ 16 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 36 ,left: 57 ,right:vec![ 58 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
58 =>
{
parser.sets[index].predict(State{rule: 37 ,left: 58 ,right:vec![ 14 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
59 =>
{
parser.sets[index].predict(State{rule: 38 ,left: 59 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 39 ,left: 59 ,right:vec![ 48 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
60 =>
{
parser.sets[index].predict(State{rule: 40 ,left: 60 ,right:vec![ 61 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
61 =>
{
parser.sets[index].predict(State{rule: 41 ,left: 61 ,right:vec![ 20,62,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
62 =>
{
parser.sets[index].predict(State{rule: 42 ,left: 62 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 43 ,left: 62 ,right:vec![ 62,63 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
63 =>
{
parser.sets[index].predict(State{rule: 44 ,left: 63 ,right:vec![ 60 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 45 ,left: 63 ,right:vec![ 64 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
64 =>
{
parser.sets[index].predict(State{rule: 46 ,left: 64 ,right:vec![ 14 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 47 ,left: 64 ,right:vec![ 13 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 48 ,left: 64 ,right:vec![ 23 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
65 =>
{
parser.sets[index].predict(State{rule: 49 ,left: 65 ,right:vec![ 31,66,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
66 =>
{
parser.sets[index].predict(State{rule: 50 ,left: 66 ,right:vec![ 67 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 51 ,left: 66 ,right:vec![ 67,82 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 52 ,left: 66 ,right:vec![ 82 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 53 ,left: 66 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
67 =>
{
parser.sets[index].predict(State{rule: 54 ,left: 67 ,right:vec![ 68 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 55 ,left: 67 ,right:vec![ 67,68 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
68 =>
{
parser.sets[index].predict(State{rule: 57 ,left: 68 ,right:vec![ 43 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 58 ,left: 68 ,right:vec![ 70,43 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 59 ,left: 68 ,right:vec![ 85 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 60 ,left: 68 ,right:vec![ 69,89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 61 ,left: 68 ,right:vec![ 82,30 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 62 ,left: 68 ,right:vec![ 70,82,30 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 63 ,left: 68 ,right:vec![ 30 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
69 =>
{
parser.sets[index].predict(State{rule: 64 ,left: 69 ,right:vec![ 70 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 65 ,left: 69 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
70 =>
{
parser.sets[index].predict(State{rule: 66 ,left: 70 ,right:vec![ 71 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 67 ,left: 70 ,right:vec![ 70,71 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
71 =>
{
parser.sets[index].predict(State{rule: 68 ,left: 71 ,right:vec![ 27,33,72,34 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 69 ,left: 71 ,right:vec![ 12 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
72 =>
{
parser.sets[index].predict(State{rule: 70 ,left: 72 ,right:vec![ 48 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 71 ,left: 72 ,right:vec![ 48,35,57 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 72 ,left: 72 ,right:vec![ 48,20,73,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 73 ,left: 72 ,right:vec![ 48,20,73,23,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
},
73 =>
{
parser.sets[index].predict(State{rule: 74 ,left: 73 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 75 ,left: 73 ,right:vec![ 72 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 76 ,left: 73 ,right:vec![ 73,23,72 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
74 =>
{
parser.sets[index].predict(State{rule: 77 ,left: 74 ,right:vec![ 17,75 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 78 ,left: 74 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
75 =>
{
parser.sets[index].predict(State{rule: 79 ,left: 75 ,right:vec![ 76 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 80 ,left: 75 ,right:vec![ 20,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
76 =>
{
parser.sets[index].predict(State{rule: 81 ,left: 76 ,right:vec![ 77 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 82 ,left: 76 ,right:vec![ 26,75 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 83 ,left: 76 ,right:vec![ 26,2,75 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 84 ,left: 76 ,right:vec![ 25 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
77 =>
{
parser.sets[index].predict(State{rule: 85 ,left: 77 ,right:vec![ 48 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
78 =>
{
parser.sets[index].predict(State{rule: 86 ,left: 78 ,right:vec![ 79 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
79 =>
{
parser.sets[index].predict(State{rule: 87 ,left: 79 ,right:vec![ 75 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
80 =>
{
parser.sets[index].predict(State{rule: 88 ,left: 80 ,right:vec![ 81 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 89 ,left: 80 ,right:vec![ 81,23 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
81 =>
{
parser.sets[index].predict(State{rule: 90 ,left: 81 ,right:vec![ 55 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 91 ,left: 81 ,right:vec![ 81,23,55 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
82 =>
{
parser.sets[index].predict(State{rule: 92 ,left: 82 ,right:vec![ 57 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 93 ,left: 82 ,right:vec![ 46 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 94 ,left: 82 ,right:vec![ 91 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 95 ,left: 82 ,right:vec![ 82,22,47 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 96 ,left: 82 ,right:vec![ 82,33,92,34 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 97 ,left: 82 ,right:vec![ 82,20,94,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 98 ,left: 82 ,right:vec![ 20,94,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 99 ,left: 82 ,right:vec![ 82,35,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 100 ,left: 82 ,right:vec![ 82,19,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 101 ,left: 82 ,right:vec![ 82,26,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 102 ,left: 82 ,right:vec![ 82,37,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 103 ,left: 82 ,right:vec![ 82,28,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 104 ,left: 82 ,right:vec![ 82,36,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 105 ,left: 82 ,right:vec![ 83 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
83 =>
{
parser.sets[index].predict(State{rule: 106 ,left: 83 ,right:vec![ 28,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 107 ,left: 83 ,right:vec![ 29,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 108 ,left: 83 ,right:vec![ 36,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 109 ,left: 83 ,right:vec![ 26,84,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
84 =>
{
parser.sets[index].predict(State{rule: 110 ,left: 84 ,right:vec![ 2 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 111 ,left: 84 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
85 =>
{
parser.sets[index].predict(State{rule: 112 ,left: 85 ,right:vec![ 86 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
86 =>
{
parser.sets[index].predict(State{rule: 113 ,left: 86 ,right:vec![ 87 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 114 ,left: 86 ,right:vec![ 96 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 115 ,left: 86 ,right:vec![ 98 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 116 ,left: 86 ,right:vec![ 99 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 117 ,left: 86 ,right:vec![ 100 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
87 =>
{
parser.sets[index].predict(State{rule: 118 ,left: 87 ,right:vec![ 3,88,31,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 119 ,left: 87 ,right:vec![ 3,88,31,101,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 120 ,left: 87 ,right:vec![ 3,88,31,101,103,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 6 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 121 ,left: 87 ,right:vec![ 3,88,31,103,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
},
88 =>
{
parser.sets[index].predict(State{rule: 122 ,left: 88 ,right:vec![ 57 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 123 ,left: 88 ,right:vec![ 46 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 124 ,left: 88 ,right:vec![ 91 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 125 ,left: 88 ,right:vec![ 88,22,46 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 126 ,left: 88 ,right:vec![ 88,33,92,34 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 127 ,left: 88 ,right:vec![ 88,20,94,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 128 ,left: 88 ,right:vec![ 20,94,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 129 ,left: 88 ,right:vec![ 88,35,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 130 ,left: 88 ,right:vec![ 88,19,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 131 ,left: 88 ,right:vec![ 88,26,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 132 ,left: 88 ,right:vec![ 88,37,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 133 ,left: 88 ,right:vec![ 88,28,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 134 ,left: 88 ,right:vec![ 88,36,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 135 ,left: 88 ,right:vec![ 86 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 136 ,left: 88 ,right:vec![ 89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 137 ,left: 88 ,right:vec![ 90 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
89 =>
{
parser.sets[index].predict(State{rule: 138 ,left: 89 ,right:vec![ 31,66,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
90 =>
{
parser.sets[index].predict(State{rule: 139 ,left: 90 ,right:vec![ 28,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 140 ,left: 90 ,right:vec![ 29,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 141 ,left: 90 ,right:vec![ 36,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 142 ,left: 90 ,right:vec![ 26,84,88 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
91 =>
{
parser.sets[index].predict(State{rule: 143 ,left: 91 ,right:vec![ 46,29,59,61 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
},
92 =>
{
parser.sets[index].predict(State{rule: 144 ,left: 92 ,right:vec![ 93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 145 ,left: 92 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
93 =>
{
parser.sets[index].predict(State{rule: 146 ,left: 93 ,right:vec![ 57 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 147 ,left: 93 ,right:vec![ 46 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 148 ,left: 93 ,right:vec![ 91 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 149 ,left: 93 ,right:vec![ 93,22,47 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 150 ,left: 93 ,right:vec![ 93,33,92,34 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 151 ,left: 93 ,right:vec![ 93,20,94,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 4 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 152 ,left: 93 ,right:vec![ 20,94,21 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 153 ,left: 93 ,right:vec![ 93,35,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 154 ,left: 93 ,right:vec![ 93,19,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 155 ,left: 93 ,right:vec![ 93,26,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 156 ,left: 93 ,right:vec![ 93,37,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 157 ,left: 93 ,right:vec![ 93,28,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 158 ,left: 93 ,right:vec![ 93,36,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 159 ,left: 93 ,right:vec![ 86 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 160 ,left: 93 ,right:vec![ 89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 161 ,left: 93 ,right:vec![ 83 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
94 =>
{
parser.sets[index].predict(State{rule: 162 ,left: 94 ,right:vec![ 95 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 163 ,left: 94 ,right:vec![ 95,23 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 164 ,left: 94 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
95 =>
{
parser.sets[index].predict(State{rule: 165 ,left: 95 ,right:vec![ 93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 166 ,left: 95 ,right:vec![ 95,23,93 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
96 =>
{
parser.sets[index].predict(State{rule: 167 ,left: 96 ,right:vec![ 4,88,89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 168 ,left: 96 ,right:vec![ 4,88,89,5,97 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
},
97 =>
{
parser.sets[index].predict(State{rule: 169 ,left: 97 ,right:vec![ 89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 170 ,left: 97 ,right:vec![ 96 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
98 =>
{
parser.sets[index].predict(State{rule: 171 ,left: 98 ,right:vec![ 6,88,89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
99 =>
{
parser.sets[index].predict(State{rule: 172 ,left: 99 ,right:vec![ 7,89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
100 =>
{
parser.sets[index].predict(State{rule: 173 ,left: 100 ,right:vec![ 8,55,9,88,89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
},
101 =>
{
parser.sets[index].predict(State{rule: 174 ,left: 101 ,right:vec![ 102 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 175 ,left: 101 ,right:vec![ 101,102 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
102 =>
{
parser.sets[index].predict(State{rule: 176 ,left: 102 ,right:vec![ 103,23 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 177 ,left: 102 ,right:vec![ 104 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 178 ,left: 102 ,right:vec![ 104,23 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
103 =>
{
parser.sets[index].predict(State{rule: 179 ,left: 103 ,right:vec![ 69,105,106,18,82 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
},
104 =>
{
parser.sets[index].predict(State{rule: 180 ,left: 104 ,right:vec![ 69,105,106,18,89 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 181 ,left: 104 ,right:vec![ 69,105,106,18,86 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
},
105 =>
{
parser.sets[index].predict(State{rule: 182 ,left: 105 ,right:vec![ 55 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
106 =>
{
parser.sets[index].predict(State{rule: 183 ,left: 106 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
107 =>
{
parser.sets[index].predict(State{rule: 184 ,left: 107 ,right:vec![ 10,48,31,108,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 185 ,left: 107 ,right:vec![ 10,48,20,112,21,31,108,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 8 ],computed_value:Token::DummyStart});
},
108 =>
{
parser.sets[index].predict(State{rule: 186 ,left: 108 ,right:vec![ 109 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 187 ,left: 108 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
109 =>
{
parser.sets[index].predict(State{rule: 188 ,left: 109 ,right:vec![ 110 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 189 ,left: 109 ,right:vec![ 110,109 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
},
110 =>
{
parser.sets[index].predict(State{rule: 190 ,left: 110 ,right:vec![ 49 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
},
111 =>
{
parser.sets[index].predict(State{rule: 191 ,left: 111 ,right:vec![ 11,48,31,101,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 5 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 192 ,left: 111 ,right:vec![ 11,48,20,112,21,31,101,32 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 8 ],computed_value:Token::DummyStart});
},
112 =>
{
parser.sets[index].predict(State{rule: 196 ,left: 112 ,right:vec![ 113 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 197 ,left: 112 ,right:vec![ 113,23 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 2 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 198 ,left: 112 ,right:vec![ ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 0 ],computed_value:Token::DummyStart});
},
113 =>
{
parser.sets[index].predict(State{rule: 199 ,left: 113 ,right:vec![ 78 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 1 ],computed_value:Token::DummyStart});
parser.sets[index].predict(State{rule: 200 ,left: 113 ,right:vec![ 113,23,78 ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; 3 ],computed_value:Token::DummyStart});
},
_ => panic!("nonterminal?"),
}
}
fn compute_value(state:&mut State<Token>)
{
state.computed_value = match state.rule
{
0 => state.values[0].clone(),
1 => match state.values[0]
{
Token::MaybeModItems(ref items) => Token::WholeCrate(items.clone()),
_ => panic!(""),
},
2 => match state.values[0]
{
Token::ModItems(ref items) => Token::MaybeModItems(items.clone()),
_ => panic!(""),
},
3 => Token::MaybeModItems(vec![]),
4 => match state.values[0]
{
Token::ModItem(ref outer,ref item) => Token::ModItems(vec![Rc::new(Token::ModItem(outer.clone(),item.clone()))]),
_ => panic!(""),
},
5 => match state.values[0]
{
Token::ModItems(ref items) => match state.values[1]
{
Token::ModItem(ref outer,ref item) =>
{
let mut new=items.clone();
new.push(Rc::new(Token::ModItem(outer.clone(),item.clone())));
Token::ModItems(new)
},
_ => panic!(""),
}
_ => panic!(""),
},
6 => match state.values[0]
{
Token::MaybeOuterAttrs(ref attrs) => match state.values[1]
{
Token::Item(ref item) => Token::ModItem(attrs.clone(),item.clone()),
_ => panic!(""),
},
_ => panic!(""),
},
7 => match state.values[0]
{
Token::StmtItem(ref item) => Token::Item(item.clone()),
_ => panic!(""),
},
8 => match state.values[0]
{
Token::ItemMacro(ref path,ref id,ref tree) => Token::Item(Rc::new(Token::ItemMacro(path.clone(),id.clone(),tree.clone()))),
_ => panic!(""),
},
9 => match state.values[0]
{
Token::BlockItem(ref item) => Token::StmtItem(item.clone()),
_ => panic!(""),
},
10 => Token::BlockItem(Rc::new(Token::ItemFn)),
193 => Token::BlockItem(Rc::new(state.values[0].clone())),
194 => match state.values[0]
{
Token::ItemNonterminal(ref id, ref ty, ref clauses) => Token::BlockItem(Rc::new(Token::ItemNonterminal(id.clone(),ty.clone(),clauses.clone()))),
_ => panic!(""),
},
11 => match (&state.values[0],&state.values[3])
{
(&Token::PathExpr(ref s),&Token::ParensDelimitedTokenTrees(ref trees)) => Token::ItemMacro(Rc::new(Token::PathExpr(s.clone())),None,Rc::new(Token::ParensDelimitedTokenTrees(trees.clone()))),
_ => panic!(""),
},
12 => match state.values[0]
{
Token::PathGenericArgsWithColons(ref s) => Token::PathExpr(s.clone()),
_ => panic!(""),
},
13 => match state.values[0]
{
Token::Ident(ref s) => Token::PathGenericArgsWithColons(s.clone()),
_ => panic!(""),
},
14 => match state.values[0]
{
Token::LiteralIdent(ref s) => Token::Ident(s.clone()),
_ => panic!(""),
},
15 => Token::ItemFn,
16 => Token::FnDecl,
17 => Token::FnParams,
18 => Token::MaybeParams,
19 => Token::MaybeParams,
20 => Token::MaybeParams,
21 => Token::Params,
22 => Token::Params,
23 => Token::Param,
24 => Token::Pat(PatKind::Underscore),
25 => match state.values[1]
{
Token::Pat(ref kind) => Token::Pat(PatKind::Ref(Rc::new(kind.clone()))),
_ => panic!(""),
},
26 => match state.values[2]
{
Token::Pat(ref kind) => Token::Pat(PatKind::RefMut(Rc::new(kind.clone()))),
_ => panic!(""),
},
27 => Token::Pat(PatKind::Void),
195 => Token::Pat(PatKind::Tuple(Rc::new(state.values[1].clone()))),
28 => Token::Pat(PatKind::Path(Rc::new(state.values[0].clone()))),
29 => Token::Pat(PatKind::EnumEmpty(Rc::new(state.values[0].clone()))),
30 => Token::Pat(PatKind::Enum(Rc::new(state.values[0].clone()),Rc::new(state.values[2].clone()))),
31 => match state.values[0]
{
Token::PathExpr(ref string) => Token::LitOrPath(string.clone()),
_ => panic!(""),
},
32 => Token::LitOrPath(String::from("[Lit]")),
33 => Token::LitOrPath(String::from("[Minus,Lit]")),
34 => Token::Lit(Rc::new(state.values[0].clone())),
35 => Token::Lit(Rc::new(state.values[0].clone())),
36 => Token::Lit(Rc::new(state.values[0].clone())),
37 => Token::Str,
38 => Token::MaybeIdent,
39 => Token::MaybeIdent,
40 => match state.values[0]
{
Token::ParensDelimitedTokenTrees(ref trees) => Token::DelimitedTokenTrees(trees.clone()),
_ => panic!(""),
},
41 => match state.values[1]
{
Token::TokenTrees(ref trees) => Token::ParensDelimitedTokenTrees(trees.clone()),
_ => panic!(""),
},
42 => Token::TokenTrees(vec![]),
43 => match (&state.values[0],&state.values[1])
{
(&Token::TokenTrees(ref trees),&Token::TokenTree(ref token)) =>
{
let mut new=trees.clone();
new.push(token.clone());
Token::TokenTrees(new)
}
_ => panic!(""),
},
44 => match state.values[0]
{
Token::DelimitedTokenTrees(ref trees) => Token::TokenTree(Rc::new(Token::DelimitedTokenTrees(trees.clone()))),
_ => panic!(""),
},
45 => match state.values[0]
{
Token::UnpairedToken(ref token) => Token::TokenTree(token.clone()),
_ => panic!(""),
},
46 => Token::UnpairedToken(Rc::new(state.values[0].clone())),
47 => Token::UnpairedToken(Rc::new(state.values[0].clone())),
48 => Token::UnpairedToken(Rc::new(state.values[0].clone())),
49 => Token::InnerAttrsAndBlock,
50 => match state.values[0]
{
Token::Stmts(ref list) => Token::MaybeStmts(list.clone(),None),
_ => panic!(""),
},
51 => match (&state.values[0],&state.values[1])
{
(&Token::Stmts(ref list),&Token::NonblockExpr(ref expr)) => Token::MaybeStmts(list.clone(),Some(expr.clone())),
_ => panic!(""),
},
52 => match state.values[0]
{
Token::NonblockExpr(ref expr) => Token::MaybeStmts(vec![],Some(expr.clone())),
_ => panic!(""),
},
53 => Token::MaybeStmts(vec![],None),
54 => match state.values[0]
{
Token::Stmt(ref stmt) => Token::Stmts(vec![stmt.clone()]),
_ => panic!(""),
}
55 => match (&state.values[0],&state.values[1])
{
(&Token::Stmts(ref stmts),&Token::Stmt(ref stmt)) =>
{
let mut new=stmts.clone();
new.push(stmt.clone());
Token::Stmts(new)
},
_ => panic!(""),
},
56 => Token::Stmt(StmtKind::Empty),
57 => match state.values[0]
{
Token::StmtItem(ref item) => Token::Stmt(StmtKind::Item(vec![],item.clone())),
_ => panic!(""),
},
58 => match (&state.values[0],&state.values[1])
{
(&Token::OuterAttrs(ref attrs),&Token::StmtItem(ref item)) => Token::Stmt(StmtKind::Item(attrs.clone(),item.clone())),
_ => panic!(""),
},
59 => match state.values[0]
{
Token::FullBlockExpr(ref block) => Token::Stmt(StmtKind::Block(vec![],block.clone())),
_ => panic!(""),
},
60 => match state.values[0]
{
Token::MaybeOuterAttrs(ref attrs) => Token::Stmt(StmtKind::Block(attrs.clone(),Rc::new(state.values[1].clone()))),
_ => panic!(""),
},
61 => match state.values[0]
{
Token::NonblockExpr(ref expr) => Token::Stmt(StmtKind::Expr(vec![],expr.clone())),
_ => panic!(""),
},
62 => match (&state.values[0],&state.values[1])
{
(&Token::OuterAttrs(ref attrs),&Token::NonblockExpr(ref expr)) => Token::Stmt(StmtKind::Expr(attrs.clone(),expr.clone())),
_ => panic!(""),
}
63 => Token::Stmt(StmtKind::Empty),
64 => match state.values[0]
{
Token::OuterAttrs(ref attrs) => Token::MaybeOuterAttrs(attrs.clone()),
_ => panic!(""),
},
65 => Token::MaybeOuterAttrs(vec![]),
66 => match state.values[0]
{
Token::OuterAttr(ref kind) => Token::OuterAttrs(vec![kind.clone()]),
_ => panic!(""),
},
67 => match (&state.values[0],&state.values[1])
{
(&Token::OuterAttrs(ref attrs),&Token::OuterAttr(ref attr)) =>
{
let mut new=attrs.clone();
new.push(attr.clone());
Token::OuterAttrs(new)
}
_ => panic!(""),
},
68 => match state.values[2]
{
Token::MetaItem(ref attr) => Token::OuterAttr(attr.clone()),
_ => panic!(""),
},
69 => match state.values[0]
{
Token::OuterDocComment(ref string) => Token::OuterAttr(AttrKind::Documentation(string.clone())),
_ => panic!(""),
},
70 => match state.values[0]
{
Token::Ident(ref string) => Token::MetaItem(AttrKind::Flag(string.clone())),
_ => panic!(""),
},
71 => match (&state.values[0],&state.values[2])
{
(&Token::Ident(ref string),&Token::Lit(ref lit)) => Token::MetaItem(AttrKind::Value(string.clone(),lit.clone())),
_ => panic!(""),
},
72 => match (&state.values[0],&state.values[2])
{
(&Token::Ident(ref string),&Token::MetaSeq(ref seq)) => Token::MetaItem(AttrKind::Sequence(string.clone(),seq.clone())),
_ => panic!(""),
},
73 => match (&state.values[0],&state.values[2])
{
(&Token::Ident(ref string),&Token::MetaSeq(ref seq)) => Token::MetaItem(AttrKind::Sequence(string.clone(),seq.clone())),
_ => panic!(""),
},
74 => Token::MetaSeq(vec![]),
75 => match state.values[0]
{
Token::MetaItem(ref attr) => Token::MetaSeq(vec![attr.clone()]),
_ => panic!(""),
},
76 => match (&state.values[0],&state.values[2])
{
(&Token::MetaSeq(ref seq),&Token::MetaItem(ref attr)) =>
{
let mut new=seq.clone();
new.push(attr.clone());
Token::MetaSeq(new)
},
_ => panic!(""),
},
77 => Token::RetTy,
78 => Token::RetTy,
79 => match state.values[0]
{
Token::TyPrim(ref kind) => Token::Ty(kind.clone()),
_ => panic!(""),
},
80 => Token::Ty(TyKind::Void),
81 => match state.values[0]
{
Token::PathGenericArgsWithoutColons(ref string) => Token::TyPrim(TyKind::Path(string.clone())),
_ => panic!(""),
},
82 => match state.values[1]
{
Token::Ty(ref kind) => Token::TyPrim(TyKind::Ref(Rc::new(kind.clone()))),
_ => panic!(""),
},
83 => match state.values[2]
{
Token::Ty(ref kind) => Token::TyPrim(TyKind::RefMut(Rc::new(kind.clone()))),
_ => panic!(""),
},
84 => Token::TyPrim(TyKind::Underscore),
85 => match state.values[0]
{
Token::Ident(ref string) => Token::PathGenericArgsWithoutColons(string.clone()),
_ => panic!(""),
},
86 => match state.values[0]
{
Token::TySumElt(ref kind) => Token::TySum(kind.clone()),
_ => panic!(""),
},
87 => match state.values[0]
{
Token::Ty(ref kind) => Token::TySumElt(kind.clone()),
_ => panic!(""),
},
88 => match state.values[0]
{
Token::PatTupElts(ref elements) => Token::PatTup(elements.clone()),
_ => panic!(""),
},
89 => match state.values[0]
{
Token::PatTupElts(ref elements) => Token::PatTup(elements.clone()),
_ => panic!(""),
},
90 => Token::PatTupElts(vec![Rc::new(state.values[0].clone())]),
91 => match state.values[0]
{
Token::PatTupElts(ref elements) =>
{
let mut new=elements.clone();
new.push(Rc::new(state.values[2].clone()));
Token::PatTupElts(new)
},
_ => panic!(""),
},
92 => Token::NonblockExpr(ExprKind::Single(Rc::new(state.values[0].clone()))),
93 => Token::NonblockExpr(ExprKind::Single(Rc::new(state.values[0].clone()))),
94 => Token::NonblockExpr(ExprKind::Single(Rc::new(state.values[0].clone()))),
95 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref kind),&Token::PathGenericArgsWithColons(ref string)) => Token::NonblockExpr(ExprKind::Member(Rc::new(kind.clone()),string.clone())),
_ => panic!(""),
},
96 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref kind),&Token::MaybeExpr(None)) => Token::NonblockExpr(ExprKind::Index(Rc::new(kind.clone()),None)),
(&Token::NonblockExpr(ref kind),&Token::MaybeExpr(Some(ref index))) => Token::NonblockExpr(ExprKind::Index(Rc::new(kind.clone()),Some(Rc::new(index.clone())))),
_ => panic!(""),
},
97 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref kind),&Token::MaybeExprs(ref arguments)) => Token::NonblockExpr(ExprKind::Call(Rc::new(kind.clone()),arguments.clone())),
_ => panic!(""),
},
98 => match state.values[1]
{
Token::MaybeExprs(ref arguments) => Token::NonblockExpr(ExprKind::Parentheses(arguments.clone())),
_ => panic!(""),
},
99 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref left),&Token::Expr(ref right)) => Token::NonblockExpr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
100 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref left),&Token::Expr(ref right)) => Token::NonblockExpr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
101 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref left),&Token::Expr(ref right)) => Token::NonblockExpr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
102 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref left),&Token::Expr(ref right)) => Token::NonblockExpr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
103 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref left),&Token::Expr(ref right)) => Token::NonblockExpr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
104 => match (&state.values[0],&state.values[2])
{
(&Token::NonblockExpr(ref left),&Token::Expr(ref right)) => Token::NonblockExpr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
105 => match state.values[0]
{
Token::NonblockPrefixExpr(ref expr) => Token::NonblockExpr(expr.clone()),
_ => panic!(""),
},
106 => match state.values[1]
{
Token::Expr(ref expr) => Token::NonblockPrefixExpr(ExprKind::Prefix(Rc::new(state.values[0].clone()),Rc::new(expr.clone()))),
_ => panic!(""),
},
107 => match state.values[1]
{
Token::Expr(ref expr) => Token::NonblockPrefixExpr(ExprKind::Prefix(Rc::new(state.values[0].clone()),Rc::new(expr.clone()))),
_ => panic!(""),
},
108 => match state.values[1]
{
Token::Expr(ref expr) => Token::NonblockPrefixExpr(ExprKind::Prefix(Rc::new(state.values[0].clone()),Rc::new(expr.clone()))),
_ => panic!(""),
},
109 => match (&state.values[1],&state.values[2])
{
(&Token::MaybeMut(ismut),&Token::Expr(ref expr)) => if ismut {Token::NonblockPrefixExpr(ExprKind::RefMut(Rc::new(expr.clone())))} else {Token::NonblockPrefixExpr(ExprKind::Ref(Rc::new(expr.clone())))},
_ => panic!(""),
},
110 => Token::MaybeMut(true),
111 => Token::MaybeMut(false),
112 => match state.values[0]
{
Token::BlockExpr(ref block) => Token::FullBlockExpr(block.clone()),
_ => panic!(""),
},
113 => Token::BlockExpr(Rc::new(state.values[0].clone())),
114 => Token::BlockExpr(Rc::new(state.values[0].clone())),
115 => Token::BlockExpr(Rc::new(state.values[0].clone())),
116 => Token::BlockExpr(Rc::new(state.values[0].clone())),
117 => Token::BlockExpr(Rc::new(state.values[0].clone())),
118 => Token::ExprMatch,
119 => Token::ExprMatch,
120 => Token::ExprMatch,
121 => Token::ExprMatch,
122 => Token::ExprNostruct,
123 => Token::ExprNostruct,
124 => Token::ExprNostruct,
125 => Token::ExprNostruct,
126 => Token::ExprNostruct,
127 => Token::ExprNostruct,
128 => Token::ExprNostruct,
129 => Token::ExprNostruct,
130 => Token::ExprNostruct,
131 => Token::ExprNostruct,
132 => Token::ExprNostruct,
133 => Token::ExprNostruct,
134 => Token::ExprNostruct,
135 => Token::ExprNostruct,
136 => Token::ExprNostruct,
137 => Token::ExprNostruct,
138 => match state.values[1]
{
Token::MaybeStmts(ref list, ref option) => Token::Block(list.clone(),option.clone()),
_ => panic!(""),
},
139 => Token::NonblockPrefixExprNostruct,
140 => Token::NonblockPrefixExprNostruct,
141 => Token::NonblockPrefixExprNostruct,
142 => Token::NonblockPrefixExprNostruct,
143 => Token::MacroExpr,
144 => match state.values[0]
{
Token::Expr(ref expr) => Token::MaybeExpr(Some(expr.clone())),
_ => panic!(""),
},
145 => Token::MaybeExpr(None),
146 => Token::Expr(ExprKind::Single(Rc::new(state.values[0].clone()))),
147 => Token::Expr(ExprKind::Single(Rc::new(state.values[0].clone()))),
148 => Token::Expr(ExprKind::Single(Rc::new(state.values[0].clone()))),
149 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref kind),&Token::PathGenericArgsWithColons(ref string)) => Token::Expr(ExprKind::Member(Rc::new(kind.clone()),string.clone())),
_ => panic!(""),
},
150 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref kind),&Token::MaybeExpr(None)) => Token::Expr(ExprKind::Index(Rc::new(kind.clone()),None)),
(&Token::Expr(ref kind),&Token::MaybeExpr(Some(ref index))) => Token::Expr(ExprKind::Index(Rc::new(kind.clone()),Some(Rc::new(index.clone())))),
_ => panic!(""),
},
151 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref kind),&Token::MaybeExprs(ref arguments)) => Token::Expr(ExprKind::Call(Rc::new(kind.clone()),arguments.clone())),
_ => panic!(""),
},
152 => match state.values[1]
{
Token::MaybeExprs(ref arguments) => Token::Expr(ExprKind::Parentheses(arguments.clone())),
_ => panic!(""),
},
153 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref left),&Token::Expr(ref right)) => Token::Expr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
154 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref left),&Token::Expr(ref right)) => Token::Expr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
155 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref left),&Token::Expr(ref right)) => Token::Expr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
156 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref left),&Token::Expr(ref right)) => Token::Expr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
157 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref left),&Token::Expr(ref right)) => Token::Expr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
158 => match (&state.values[0],&state.values[2])
{
(&Token::Expr(ref left),&Token::Expr(ref right)) => Token::Expr(ExprKind::Infix(Rc::new(left.clone()),Rc::new(state.values[1].clone()),Rc::new(right.clone()))),
_ => panic!(""),
},
159 => match state.values[0]
{
Token::BlockExpr(ref block) => Token::Expr(ExprKind::Single(block.clone())),
_ => panic!(""),
},
160 => Token::Expr(ExprKind::Single(Rc::new(state.values[0].clone()))),
161 => match state.values[0]
{
Token::NonblockPrefixExpr(ref expr) => Token::Expr(expr.clone()),
_ => panic!(""),
},
162 => match state.values[0]
{
Token::Exprs(ref list) => Token::MaybeExprs(list.clone()),
_ => panic!(""),
},
163 => match state.values[0]
{
Token::Exprs(ref list) => Token::MaybeExprs(list.clone()),
_ => panic!(""),
},
164 => Token::MaybeExprs(vec![]),
165 => match state.values[0]
{
Token::Expr(ref expr) => Token::Exprs(vec![expr.clone()]),
_ => panic!(""),
},
166 => match (&state.values[0],&state.values[2])
{
(&Token::Exprs(ref list),&Token::Expr(ref expr)) =>
{
let mut new=list.clone();
new.push(expr.clone());
Token::Exprs(new)
},
_ => panic!(""),
},
167 => Token::ExprIf,
168 => Token::ExprIf,
169 => Token::BlockOrIf,
170 => Token::BlockOrIf,
171 => Token::ExprWhile,
172 => Token::ExprLoop,
173 => Token::ExprFor,
174 => Token::MatchClauses(vec![Rc::new(state.values[0].clone())]),
175 => match state.values[0]
{
Token::MatchClauses(ref clauses) =>
{
let mut new=clauses.clone();
new.push(Rc::new(state.values[1].clone()));
Token::MatchClauses(new)
},
_ => panic!(""),
},
176 => match state.values[0]
{
Token::NonblockMatchClause(ref attributes, ref patterns, ref expression) => Token::MatchClause(attributes.clone(),patterns.clone(),expression.clone()),
_ => panic!(""),
},
177 => match state.values[0]
{
Token::BlockMatchClause(ref attributes, ref patterns, ref expression) => Token::MatchClause(attributes.clone(),patterns.clone(),expression.clone()),
_ => panic!(""),
},
178 => match state.values[0]
{
Token::BlockMatchClause(ref attributes, ref patterns, ref expression) => Token::MatchClause(attributes.clone(),patterns.clone(),expression.clone()),
_ => panic!(""),
},
179 => match state.values[0]
{
Token::MaybeOuterAttrs(ref attributes) => Token::NonblockMatchClause(attributes.clone(),Rc::new(state.values[1].clone()),Rc::new(state.values[4].clone())),
_ => panic!(""),
},
180 => match state.values[0]
{
Token::MaybeOuterAttrs(ref attributes) => Token::BlockMatchClause(attributes.clone(),Rc::new(state.values[1].clone()),Rc::new(state.values[4].clone())),
_ => panic!(""),
}
181 => match state.values[0]
{
Token::MaybeOuterAttrs(ref attributes) => Token::BlockMatchClause(attributes.clone(),Rc::new(state.values[1].clone()),Rc::new(state.values[4].clone())),
_ => panic!(""),
},
182 => Token::PatsOr(Rc::new(state.values[0].clone())),
183 => Token::MaybeGuard,
184 => match (&state.values[1],&state.values[3])
{
(&Token::Ident(ref id),&Token::MaybeTerminalItems(ref items)) => Token::ItemTerminal(id.clone(),None,items.clone()),
_ => panic!(""),
}
185 => match (&state.values[1],&state.values[6])
{
(&Token::Ident(ref id),&Token::MaybeTerminalItems(ref items)) => Token::ItemTerminal(id.clone(),Some(Rc::new(state.values[3].clone())),items.clone()),
_ => panic!(""),
}
186 => match state.values[0]
{
Token::TerminalItems(ref items) => Token::MaybeTerminalItems(items.clone()),
_ => panic!(""),
},
187 => Token::MaybeTerminalItems(vec![]),
188 => match state.values[0]
{
Token::TerminalItem(ref item) => Token::TerminalItems(vec![item.clone()]),
_ => panic!(""),
},
189 => match (&state.values[0],&state.values[1])
{
(&Token::TerminalItem(ref item),&Token::TerminalItems(ref items)) =>
{
let mut new:Vec<Rc<Token>>=vec![item.clone()];
new.extend(items.iter().map(|x|x.clone()));
Token::TerminalItems(new)
},
_ => panic!(""),
},
190 => Token::TerminalItem(Rc::new(state.values[0].clone())),
191 => match (&state.values[1],&state.values[3])
{
(&Token::Ident(ref id),&Token::MatchClauses(ref clauses)) => Token::ItemNonterminal(id.clone(),None,clauses.clone()),
_ => panic!(""),
},
192 => match (&state.values[1],&state.values[6])
{
(&Token::Ident(ref id),&Token::MatchClauses(ref clauses)) => Token::ItemNonterminal(id.clone(),Some(Rc::new(state.values[3].clone())),clauses.clone()),
_ => panic!(""),
},
196 => match state.values[0]
{
Token::TySums(ref types) => Token::MaybeTySums(types.clone()),
_ => panic!(""),
},
197 => match state.values[0]
{
Token::TySums(ref types) => Token::MaybeTySums(types.clone()),
_ => panic!(""),
},
198 => Token::MaybeTySums(vec![]),
199 => Token::TySums(vec![Rc::new(state.values[0].clone())]),
200 => match state.values[0]
{
Token::TySums(ref types) =>
{
let mut new=types.clone();
new.push(Rc::new(state.values[2].clone()));
Token::TySums(new)
},
_ => panic!(""),
},
_ => panic!("Not a rule"),
}
}
fn table_terminal(token_index:usize)->bool
{
match token_index
{
1 ... 37 => true,
0| 38 ... 113 => false,
_ => panic!("table_terminal"),
}
}
fn table_priority(a:usize, b:usize) -> Option<Ordering>
{
match (a,b)
{
_ => None,
}
}
fn table_associativity(rule:usize) -> Option<Associativity>
{
match rule
{
_ => None
}
}
fn to_usize(token:&Token) -> usize
{
match token
{
&Token::DummyStart => 0,
&Token::FN => 1,
&Token::Mut => 2,
&Token::Match => 3,
&Token::If => 4,
&Token::Else => 5,
&Token::While => 6,
&Token::Loop => 7,
&Token::For => 8,
&Token::In => 9,
&Token::Terminal => 10,
&Token::Nonterminal => 11,
&Token::OuterDocComment(_) => 12,
&Token::LiteralIdent(_) => 13,
&Token::LitStr(_) => 14,
&Token::LitChar(_) => 15,
&Token::LitInteger(_) => 16,
&Token::RArrow => 17,
&Token::FatArrow => 18,
&Token::EqualEqual => 19,
&Token::LPar => 20,
&Token::RPar => 21,
&Token::Dot => 22,
&Token::Comma => 23,
&Token::Colon => 24,
&Token::Underscore => 25,
&Token::Ampersand => 26,
&Token::NumberSign => 27,
&Token::Minus => 28,
&Token::Bang => 29,
&Token::Semicolon => 30,
&Token::LBrace => 31,
&Token::RBrace => 32,
&Token::LBracket => 33,
&Token::RBracket => 34,
&Token::Equal => 35,
&Token::Star => 36,
&Token::Plus => 37,
&Token::WholeCrate(_) => 38,
&Token::MaybeModItems(_) => 39,
&Token::ModItems(_) => 40,
&Token::ModItem(_,_) => 41,
&Token::Item(_) => 42,
&Token::StmtItem(_) => 43,
&Token::BlockItem(_) => 44,
&Token::ItemMacro(_,_,_) => 45,
&Token::PathExpr(_) => 46,
&Token::PathGenericArgsWithColons(_) => 47,
&Token::Ident(_) => 48,
&Token::ItemFn => 49,
&Token::FnDecl => 50,
&Token::FnParams => 51,
&Token::MaybeParams => 52,
&Token::Params => 53,
&Token::Param => 54,
&Token::Pat(_) => 55,
&Token::LitOrPath(_) => 56,
&Token::Lit(_) => 57,
&Token::Str => 58,
&Token::MaybeIdent => 59,
&Token::DelimitedTokenTrees(_) => 60,
&Token::ParensDelimitedTokenTrees(_) => 61,
&Token::TokenTrees(_) => 62,
&Token::TokenTree(_) => 63,
&Token::UnpairedToken(_) => 64,
&Token::InnerAttrsAndBlock => 65,
&Token::MaybeStmts(_,_) => 66,
&Token::Stmts(_) => 67,
&Token::Stmt(_) => 68,
&Token::MaybeOuterAttrs(_) => 69,
&Token::OuterAttrs(_) => 70,
&Token::OuterAttr(_) => 71,
&Token::MetaItem(_) => 72,
&Token::MetaSeq(_) => 73,
&Token::RetTy => 74,
&Token::Ty(_) => 75,
&Token::TyPrim(_) => 76,
&Token::PathGenericArgsWithoutColons(_) => 77,
&Token::TySum(_) => 78,
&Token::TySumElt(_) => 79,
&Token::PatTup(_) => 80,
&Token::PatTupElts(_) => 81,
&Token::NonblockExpr(_) => 82,
&Token::NonblockPrefixExpr(_) => 83,
&Token::MaybeMut(_) => 84,
&Token::FullBlockExpr(_) => 85,
&Token::BlockExpr(_) => 86,
&Token::ExprMatch => 87,
&Token::ExprNostruct => 88,
&Token::Block(_,_) => 89,
&Token::NonblockPrefixExprNostruct => 90,
&Token::MacroExpr => 91,
&Token::MaybeExpr(_) => 92,
&Token::Expr(_) => 93,
&Token::MaybeExprs(_) => 94,
&Token::Exprs(_) => 95,
&Token::ExprIf => 96,
&Token::BlockOrIf => 97,
&Token::ExprWhile => 98,
&Token::ExprLoop => 99,
&Token::ExprFor => 100,
&Token::MatchClauses(_) => 101,
&Token::MatchClause(_,_,_) => 102,
&Token::NonblockMatchClause(_,_,_) => 103,
&Token::BlockMatchClause(_,_,_) => 104,
&Token::PatsOr(_) => 105,
&Token::MaybeGuard => 106,
&Token::ItemTerminal(_,_,_) => 107,
&Token::MaybeTerminalItems(_) => 108,
&Token::TerminalItems(_) => 109,
&Token::TerminalItem(_) => 110,
&Token::ItemNonterminal(_,_,_) => 111,
&Token::MaybeTySums(_) => 112,
&Token::TySums(_) => 113,
}
}
}
#[derive(Debug)]
struct Rule
{
patterns: Vec<Rc<Token>>, expression: Rc<Token>, priority: Option<String>,
}
#[derive(Debug)]
struct TokenInfo
{
id: String,
type_arguments: Vec<Rc<Token>>,
is_terminal: bool,
re: Option<String>,
fn_match: Option<Rc<Token>>,
rules: Vec<Rule>,
}
struct Compiler<'a>
{
source: &'a Token,
token_info: Vec<TokenInfo>,
first_nonterminal: Option<usize>,
token_name_to_index: HashMap<String,usize>,
ordering: HashMap<(String,String),Ordering>,
}
impl<'a> Compiler<'a>
{
fn process_token(&mut self,token:&Token)
{
println!(">>process_token {:?}",token);
match token
{
&Token::WholeCrate(ref items) =>
{
for item in items
{
self.process_token(item);
}
},
&Token::ModItem(ref attributes,ref item) =>
{
self.process_token(item);
},
&Token::ItemMacro(ref path, ref id, ref tree) =>
{
println!("Got macro {:?} with data {:?}",path,tree);
match (path.as_ref(),tree.as_ref())
{
(&Token::PathExpr(ref s),&Token::ParensDelimitedTokenTrees(ref data)) =>
{
if s=="re_terminal"
{
let mut comma_index=0;
while comma_index<data.len() && *data[comma_index]!=Token::Comma
{
comma_index+=1;
}
if comma_index<data.len()
{
match (data[0].as_ref(),data[comma_index+1].as_ref())
{
(&Token::LiteralIdent(ref id),&Token::LitStr(ref re)) =>
{
if id!="_"
{
self.token_info.push(TokenInfo{
id:id.clone(),
type_arguments: vec![],
is_terminal: true,
re:Some(re[1..re.len()-1].to_string()),
fn_match: None,
rules: vec![],
});
}
},
_ => println!("incorrect data in re_terminal"),
}
}
else
{
println!("incorrect data in re_terminal");
}
}
else if s=="ordering"
{
let mut order=vec![];
for elem in data
{
match elem.as_ref()
{
&Token::LiteralIdent(ref id) => order.push(id.clone()),
&Token::Comma => (),
_ => panic!("incorrect token in ordering! {:?}",elem),
};
}
for i in 0..order.len()
{
for j in 0..order.len()
{
self.ordering.insert((order[i].clone(),order[j].clone()),i.cmp(&j));
}
}
}
},
_ => println!("ignoring macro"),
};
},
&Token::ItemTerminal(ref id, ref ty, ref items) =>
{
let type_arguments= match ty
{
&None => vec![],
&Some(ref mts) => match mts.as_ref()
{
&Token::MaybeTySums(ref types) => types.clone(),
_ => panic!(""),
}
};
self.token_info.push(TokenInfo{
id:id.clone(),
type_arguments,
is_terminal: true,
re: None,
fn_match: None, rules: vec![],
});
},
&Token::ItemNonterminal(ref id, ref ty, ref clauses) =>
{
if let None=self.first_nonterminal
{
self.first_nonterminal=Some(self.token_info.len());
}
let mut rules=vec![];
for clause in clauses
{
println!("Found clause {:?}",clause);
if let &Token::MatchClause(ref attributes,ref patterns,ref expression)=clause.as_ref()
{
let mut rule_patterns : Vec<Rc<Token>>=vec![];
if let &Token::PatsOr(ref patsor_pat)=patterns.as_ref()
{
if let &Token::Pat(PatKind::Tuple(ref tuple))=patsor_pat.as_ref()
{
if let &Token::PatTup(ref pats)=tuple.as_ref()
{
for pat in pats
{
rule_patterns.push(pat.clone());
}
}
}
}
let mut priority=None;
for attr in attributes
{
if let &AttrKind::Sequence(ref attr_name, ref seq)=attr
{
if attr_name=="priority"
{
if seq.len()!=1
{
panic!("there must be exactly one priority flag ({:?})",attr);
}
if let AttrKind::Flag(ref p_flag)=seq[0]
{
priority=Some(p_flag.clone());
}
else
{
panic!("I do not understand this priority {:?}",attr);
}
}
}
}
rules.push(Rule{
patterns: rule_patterns,
expression: expression.clone(),
priority,
});
}
}
let type_arguments= match ty
{
&None => vec![],
&Some(ref mts) => match mts.as_ref()
{
&Token::MaybeTySums(ref types) => types.clone(),
_ => panic!(""),
}
};
self.token_info.push(TokenInfo{
id:id.clone(),
type_arguments,
is_terminal: false,
re: None,
fn_match: None,
rules,
});
},
_ => (),
};
}
fn compile(&mut self)
{
self.process_token(self.source);
for (i,token) in self.token_info.iter().enumerate()
{
println!("token {}={:?}",i+1,token);
self.token_name_to_index.insert(token.id.clone(),i+1);
}
println!("first non-terminal={:?}",self.first_nonterminal);
println!("--------------------------------------");
println!("enum Token{{DummyStart,");
for token in self.token_info.iter()
{
if token.type_arguments.len()>0
{
print!("{}({}),",token.id,token.type_arguments.iter().map(|t|format!("{}",t)).collect::<Vec<String>>().join(","));
}
else
{
print!("{},",token.id);
}
}
println!("}}\nimpl Default for Token {{ fn default()->Self{{Token::DummyStart}} }}");
println!("struct ParsingTables {{ }}");
println!("impl ParsingTablesTrait<Token> for ParsingTables {{");
println!("fn initial()->usize {{ {} }}",self.first_nonterminal.unwrap()+1);
println!("fn match_some(parser: &mut Parser<Token,Self>) -> Option<(usize,Token)> {{ let source=&parser.source[parser.source_index..];");
for token in self.token_info.iter()
{
if token.is_terminal
{
if let Some(ref sre)=token.re
{
println!("match {{ match parser.re(\"{}\",source) {{ None => None, Some((size,_string)) => Some((size,())) }} }}",sre);
println!("{{ None => (), Some((size,_result)) => return Some((size,Token::{})), }};",token.id);
}
else
{
println!("PUT HERE THE MATCH WITH {},",token.id);
}
}
}
println!("None }}//match_some"); println!("fn predict(parser:&mut Parser<Token,Self>,index:usize,state_index:usize,token:usize) {{ match token {{");
let mut irule=1;
for (i,token) in self.token_info.iter().enumerate()
{
if !token.is_terminal
{
println!("{} => {{",i+1);
for rule in token.rules.iter()
{
println!("parser.sets[index].predict(State{{rule: {} ,left: {} ,right:vec![ {} ],position:0,original_set:index,kind:EarleyKind::Predict(state_index),values:vec![Token::DummyStart; {} ],computed_value:Token::DummyStart}});",irule,i+1,rule.patterns.iter().map(|p|match p.as_ref()
{
&Token::Pat(PatKind::Path(ref path)) => match path.as_ref()
{
&Token::LitOrPath(ref string) => self.token_name_to_index.get(string).expect(&format!("string {} not found in map",string)).to_string(),
_ => panic!(""),
},
&Token::Pat(PatKind::Enum(ref name, _ )) => match name.as_ref()
{
&Token::PathExpr(ref string) => self.token_name_to_index.get(string).expect(&format!("string {} not found in map",string)).to_string(),
_ => panic!(""),
},
_ => panic!("received {:?}",p),
}).collect::<Vec<String>>().join(","),rule.patterns.len());
irule+=1;
}
println!("}}");
}
}
println!("_ => panic!(\"\"), }} }}//predict");
println!("fn compute_value(state:&mut State<Token>) {{ state.computed_value = match state.rule {{ 0 => state.values[0].clone(),");
let mut irule=1;
for token in self.token_info.iter()
{
for rule in token.rules.iter()
{
println!("{} => match ({}) {{",irule,(0..rule.patterns.len()).map(|i| format!("&state.values[{}]",i) ).collect::<Vec<String>>().join(","));
let pattern_string=rule.patterns.iter().map(|p|match p.as_ref()
{
&Token::Pat(PatKind::Path(ref path)) => match path.as_ref()
{
&Token::LitOrPath(ref string) => format!("&Token::{}",string),
_ => panic!(""),
},
&Token::Pat(PatKind::Enum(ref name, ref tuple)) => match (name.as_ref(),tuple.as_ref())
{
(&Token::PathExpr(ref string),&Token::PatTup(ref v)) => format!("&Token::{}({})",string,v.iter().map(|x| format!("{}",x) ).collect::<Vec<String>>().join(",")),
_ => panic!("name={:?} tuple={:?}",name,tuple),
},
_ => panic!("received {:?}",p),
}).collect::<Vec<String>>().join(",");
if token.type_arguments.len()==0
{
println!("({}) => Token::{},",pattern_string,token.id);
}
else
{
println!("({}) => Token::{}({}),",pattern_string,token.id,rule.expression);
}
println!("_ => panic!(\"\"), }},");
irule+=1;
}
}
println!("_ => panic(\"\"), }} }}//compute_value");
println!("fn table_terminal(token_index:usize)->bool {{ match token_index {{");
println!("{} => true,",self.token_info.iter().enumerate().filter_map(|(i,t)|if t.is_terminal {Some((i+1).to_string())} else {None}).collect::<Vec<String>>().join("|"));
println!("0|{} => false,",self.token_info.iter().enumerate().filter_map(|(i,t)|if !t.is_terminal {Some((i+1).to_string())} else {None}).collect::<Vec<String>>().join("|"));
println!("_ => panic!(\"table_terminal\"), }} }}//table_terminal");
println!("fn table_priority(a:usize, b:usize) -> Option<Ordering> {{ match (a,b) {{");
let mut irule=1;
for ltoken in self.token_info.iter()
{
for lrule in ltoken.rules.iter()
{
if let Some(ref lorder)=lrule.priority
{
let mut jrule=1;
for rtoken in self.token_info.iter()
{
for rrule in rtoken.rules.iter()
{
if let Some(ref rorder)=rrule.priority
{
println!("({},{}) => Some(Ordering::{:?}),",irule,jrule,self.ordering.get(&(lorder.clone(),rorder.clone())).expect("what?"));
}
jrule+=1;
}
}
}
irule+=1;
}
}
println!("_ => None, }} }}//table_priority");
println!("fn table_associativity(rule:usize) -> Option<Associativity> {{ match rule {{");
println!("_ => None, }} }}//table_associativity");
println!("fn to_usize(token:&Token) -> usize {{ match token {{ &Token::DummyStart => 0,");
for (i,token) in self.token_info.iter().enumerate()
{
if token.type_arguments.len()==0
{
println!("&Token::{} => {},",token.id,i+1);
}
else
{
println!("&Token::{}({}) => {},",token.id,(0..token.type_arguments.len()).map(|_|String::from("_")).collect::<Vec<String>>().join(","),i+1);
}
}
println!("}} }}//to_usize");
println!("}}//impl"); }
}
fn main()
{
let args: Vec<String> = env::args().collect();
if args.len()!=2
{
println!("Use:\n\t{} filename",args[0]);
return;
}
let mut f = File::open(&args[1]).expect("file cannot be opened");
let mut contents = String::new();
f.read_to_string(&mut contents).expect("something went wrong reading the file");
match Parser::<Token,ParsingTables>::parse(&contents,None)
{
Err(x) => println!("error parsing: {:?}",x),
Ok(x) =>
{
let mut compiler=Compiler{
source: &x,
token_info: vec![],
first_nonterminal: None,
token_name_to_index: HashMap::new(),
ordering: HashMap::new(),
};
compiler.compile();
},
};
}