summaryrefslogtreecommitdiffstats
path: root/crates/rebel-parse/src/grammar/tokenize.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/rebel-parse/src/grammar/tokenize.rs')
-rw-r--r--crates/rebel-parse/src/grammar/tokenize.rs21
1 files changed, 11 insertions, 10 deletions
diff --git a/crates/rebel-parse/src/grammar/tokenize.rs b/crates/rebel-parse/src/grammar/tokenize.rs
index b497e23..826f4ce 100644
--- a/crates/rebel-parse/src/grammar/tokenize.rs
+++ b/crates/rebel-parse/src/grammar/tokenize.rs
@@ -8,7 +8,8 @@ peg::parser! {
= _ tokens:(token() ** _) _ { tokens }
pub rule token() -> Token<'input>
- = literal:literal() { Token::Literal(literal) }
+ = number:number() { Token::Number(number) }
+ / string:string() { Token::String(string) }
/ ident:ident() { Token::Ident(ident) }
/ punct:punct() { Token::Punct(punct) }
@@ -22,24 +23,24 @@ peg::parser! {
= ch:punct_char() spacing:spacing() { Punct(ch, spacing) }
rule punct_char() -> char
- = !literal() !ident() !__ ch:[_] { ch }
+ = !number() !string() !ident() !__ ch:[_] { ch }
rule spacing() -> Spacing
= &punct_char() { Spacing::Joint }
/ { Spacing::Alone }
- rule literal() -> Literal<'input>
- = content:$(['0'..='9'] ['0'..='9' | 'a'..='z' | 'A'..='Z' | '_']*) {
- Literal { content, kind: LiteralKind::Number }
- }
- / "\"" content:$(string_char()*) "\"" {
- Literal { content, kind: LiteralKind::String }
+ rule number() -> &'input str
+ = $(['0'..='9'] ['0'..='9' | 'a'..='z' | 'A'..='Z' | '_']*)
+
+ rule string() -> String<'input>
+ = "\"" content:$(string_char()*) "\"" {
+ String { content, kind: StringKind::String }
}
/ "r\"" content:$([^'"']*) "\"" {
- Literal { content, kind: LiteralKind::RawString }
+ String { content, kind: StringKind::RawString }
}
/ "```" newline() content:$((!"```" [_])+) "```" {
- Literal { content, kind: LiteralKind::ScriptString }
+ String { content, kind: StringKind::ScriptString }
}
rule string_char()