diff --git a/src/grammar.pest b/src/grammar.pest index 4f75643..db36c39 100644 --- a/src/grammar.pest +++ b/src/grammar.pest @@ -13,9 +13,10 @@ operator = { "+" | "-" | "*" | "/" | "&&" | "||" } ident = @{ ALPHABETIC ~ (ALPHABETIC | NUMBER | "_")* | quoted_indent } quoted_indent = _{ "`" ~ (!"`" ~ ANY)+ ~ "`" } -literal = { string | number | boolean } +literal = { string | number | boolean | char } string = { "\"" ~ (!"\"" ~ ANY)* ~ "\"" } +char = { "'" ~ !"'" ~ ANY ~ "'" } number = _{ byte | float | integer } integer = @{ "-"? ~ ASCII_DIGIT+ } float = @{ diff --git a/src/test/literals.rs b/src/test/literals.rs index fbfc5a1..6180ed4 100644 --- a/src/test/literals.rs +++ b/src/test/literals.rs @@ -75,6 +75,20 @@ fn it_parses_strings() { ]); } +#[test] +fn it_parses_chars() { + parses_to!(parser: SnekParser, input: "'c'", rule: Rule::literal, tokens: [ + literal(0, 3, [ + char(0, 3) + ]) + ]); + parses_to!(parser: SnekParser, input: r"'\''", rule: Rule::literal, tokens: [ + literal(0, 3, [ + char(0, 3) + ]) + ]); +} + #[test] fn it_parses_booleans() { parses_to!(parser: SnekParser, input: "true", rule: Rule::literal, tokens: [