use back::compiler::*;
pub struct StrLiteralCompiler
{
literal: String
}
impl StrLiteralCompiler
{
pub fn recognizer(literal: String) -> StrLiteralCompiler {
StrLiteralCompiler {
literal: literal
}
}
pub fn parser(literal: String) -> StrLiteralCompiler {
StrLiteralCompiler::recognizer(literal)
}
}
impl CompileExpr for StrLiteralCompiler
{
fn compile_expr<'a>(&self, _context: &mut Context<'a>,
continuation: Continuation) -> syn::Expr
{
let lit = self.literal.as_str();
continuation
.map_success(|success, failure| parse_quote!(
if state.consume_prefix(#lit) {
#success
}
else {
state.error(#lit);
#failure
}
))
.unwrap_success()
}
}