sparser 0.1.1

S-expression parser for Rust
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
scheme = {soi ~ list ~ eoi}
space = _{" " | "\t" | "\r" | "\n"}

list = {"(" ~ (space* ~ (("'" ~ literal) | symbol | list | string | number | true_lit | false_lit) ~ space*)* ~ ")"}

int = _{'0'..'9'}

literalvars = _{list | symbol}
literal = @{literalvars}

number = {"-"? ~ (int)+ ~ ("." ~ int+)?}
string = {"\"" ~ (any)* ~ "\""}
symbol = {('a'..'z' | "!" | "+" | "-" | "*" | "/" | "=" | "?")+}
true_lit = {"#" ~ ^"t"}
false_lit = {"#" ~ ^"f"}