use back::compiler::*;
pub struct SequenceCompiler
{
seq: Vec<usize>,
compiler: ExprCompilerFn
}
impl SequenceCompiler
{
pub fn recognizer(seq: Vec<usize>) -> SequenceCompiler {
SequenceCompiler {
seq: seq,
compiler: recognizer_compiler
}
}
pub fn parser(seq: Vec<usize>) -> SequenceCompiler {
SequenceCompiler {
seq: seq,
compiler: parser_compiler
}
}
}
impl CompileExpr for SequenceCompiler
{
fn compile_expr<'a>(&self, context: &mut Context<'a>,
continuation: Continuation) -> syn::Expr
{
self.seq.clone().into_iter()
.rev()
.fold(continuation, |continuation, idx|
continuation.compile_success(context, self.compiler, idx))
.unwrap_success()
}
}