From 1e8d8896b36c581121c7ba5c501c45bedce084e2 Mon Sep 17 00:00:00 2001 From: David Li Date: Sat, 4 Nov 2017 19:58:32 -0400 Subject: Parse identifiers --- src/ast.rs | 1 + src/taiga.lalrpop | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/ast.rs b/src/ast.rs index 7074e56..22d968e 100644 --- a/src/ast.rs +++ b/src/ast.rs @@ -64,5 +64,6 @@ pub enum Expression { BinOp(BinOp, Box>, Box>), Number(u64), String(String), + Name(String), Nil, } diff --git a/src/taiga.lalrpop b/src/taiga.lalrpop index ffee4ee..be47147 100644 --- a/src/taiga.lalrpop +++ b/src/taiga.lalrpop @@ -85,10 +85,12 @@ ExpressionSign: Box> = { ExpressionBase: Box> = { Num => Box::new(<>.map(|v| ast::Expression::Number(v))), String => Box::new(<>.map(|v| ast::Expression::String(v))), + Name => Box::new(<>.map(|v| ast::Expression::Name(v))), Spanned => Box::new(<>.map(|v| ast::Expression::Nil)), "(" ")" => <>, }; +Name: WithLocation = > => e.map(|v| v.to_owned()); Num: WithLocation = > => e.map(|v| u64::from_str(v).unwrap()); String: WithLocation = => { WithLocation::new(v[1..v.len() - 1].to_owned(), l, r) @@ -97,3 +99,13 @@ String: WithLocation = => Spanned: WithLocation = { => WithLocation::new(v, l, r) }; + +match { + "nil", +} +else { + r"[[:alpha:]_][[:alpha:]_0-9]*", +} +else { + _, +} -- cgit v1.2.3