From ad91e3b3fb3cbf30a32a3e106d386305c82ff704 Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 17 Nov 2022 18:47:22 +0100 Subject: [PATCH] Parse literals except string literals --- src/parser.rs | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 2089425..d6ba3fe 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -90,7 +90,29 @@ fn table_lit( }) } -pub fn parser() -> impl Parser> { - let expr = num_lit().map(|num| Expr::Lit(Lit::Num(num))); - table_lit(expr).then_ignore(end()) +fn string_lit() -> impl Parser> + Clone { + filter(|_| false).to(String::new()) // TODO Implement +} + +fn lit( + expr: impl Parser> + Clone, +) -> impl Parser> { + let nil = text::keyword("nil").to(Lit::Nil); + let r#true = text::keyword("true").to(Lit::Bool(true)); + let r#false = text::keyword("false").to(Lit::Bool(false)); + let num = num_lit().map(Lit::Num); + let string = string_lit().map(Lit::String); + let table = table_lit(expr).map(Lit::Table); + + nil.or(r#true) + .or(r#false) + .or(num) + .or(string) + .or(table) + .padded() +} + +pub fn parser() -> impl Parser> { + let expr = num_lit().map(|num| Expr::Lit(Lit::Num(num))); + lit(expr).then_ignore(end()) }