neyuki 0.1.0

A small Lua-like scripting language implemented in Rust
use std::fs;
use std::panic;

use crate::lexer::Lexer;
use crate::parser::Parser;

pub fn lint(path: &str) -> Result<(), String> {
    let source =
        fs::read_to_string(path).map_err(|err| format!("failed to read {}: {}", path, err))?;

    let mut lexer = Lexer::new(&source);
    let tokens = lexer.tokenize();
    for token in &tokens {
        println!("{} @{}: {}", token.kind, token.line, token.value);
    }

    let mut parser = Parser::new(&source);
    let result = panic::catch_unwind(panic::AssertUnwindSafe(|| parser.parse_program()));

    let program = result.map_err(|_| format!("parse failed for {}", path))?;
    println!("parsed statements: {}", program.len());
    Ok(())
}