Skip to content

Latest commit

 

History

History
61 lines (53 loc) · 1.15 KB

README.md

File metadata and controls

61 lines (53 loc) · 1.15 KB

fastexpr.rs

A fast, tiny, minimal dependency JavaScript expression parser, written in Rust.

Features

  • Fast. Hand-coded lexer and top-down operator precedence parser.
  • Small. Around ~1000 LOC.
  • Compatible. Parses all valid JavaScript expressions. Produces an esprima style AST.

Usage:

let result = parse("(s) => `hello from ${s}!`");

match result {
    Ok(expr) => {
        println!("{:#?}", expr);
    }
    Err(err) => {
        println!("{:#?}", err);
    }
}

which produces:

ArrowFunction {
    params: [
        Identifier {
            token: Identifier(
                "s",
            ),
        },
    ],
    body: TemplateLiteral {
        quasis: [
            TemplateString {
                token: String(
                    "hello from ",
                ),
                tail: false,
            },
            TemplateString {
                token: String(
                    "!",
                ),
                tail: true,
            },
        ],
        expressions: [
            Identifier {
                token: Identifier(
                    "s",
                ),
            },
        ],
    },
}