llmaker 0.0.1

Make LL(1) token parser code for Rust.
use super::types;

const HEADERMSG: &str = r#"
//
// This file was generated by llmaker.
//

"use std::cmp::Ordering;"
"#;

pub fn head_to_str(headvec: types::Head, setting: types::Setting) -> String {
  let headstr = vecstr_to_str(headvec);
  let (main_type_str, _) = setting;
  let parse_error_type_str = make_parse_erro_type_str(main_type_str);
  format!("{}\n{}\n\n{}", HEADERMSG, headstr, parse_error_type_str)
}

fn vecstr_to_str(v: Vec<(types::Range, String)>) -> String {
  let mut s = String::new();
  for d in v.iter() {
    let (_, st) = d;
    s.push_str(&format!("{}\n", st))
  }
  s
}

fn make_parse_erro_type_str(main_type_str: String) -> String {
  format!(
    "
#[derive(Debug, Clone)]
pub enum ParseError {{
  UnexpectedToken({}),
  RedundantExpression({}),
  Eof,
}}
",
    main_type_str, main_type_str
  )
}