From 8bd25a3c6be71864e018a5657a5e2a6e4f716834 Mon Sep 17 00:00:00 2001 From: fef Date: Thu, 28 Jul 2022 20:10:14 +0200 Subject: [PATCH] add true and false keywords --- src/ast/mod.rs | 2 ++ src/ast/tree.rs | 11 +++++------ src/lex/mod.rs | 6 ++++-- src/lex/token.rs | 6 ++++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/ast/mod.rs b/src/ast/mod.rs index dce9eb0..780751b 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -449,6 +449,8 @@ impl Parser { Ok(tree::Node::Int(num)) } token::Kind::StringLiteral => Ok(tree::Node::String(token.raw)), + token::Kind::TrueKeyword => Ok(tree::Node::Bool(true)), + token::Kind::FalseKeyword => Ok(tree::Node::Bool(false)), token::Kind::OBracket => self.parse_array(), _ => self.syntax_error(format!("Unexpected token {}", token.kind), &token), } diff --git a/src/ast/tree.rs b/src/ast/tree.rs index 12d2054..4c80c43 100644 --- a/src/ast/tree.rs +++ b/src/ast/tree.rs @@ -11,6 +11,7 @@ pub enum Node { Ident(String), DepList(Box), SourceList(Box), + Bool(bool), Int(i128), String(String), Array(Vec), @@ -73,9 +74,7 @@ pub enum Operator { Minus, MinusEq, Asterisk, - AsteriskAsterisk, AsteriskEq, - AsteriskAsteriskEq, Slash, SlashEq, Percent, @@ -160,6 +159,10 @@ impl fmt::Display for Node { "{}", match self { Node::Ident(name) => name.as_str(), + Node::Bool(b) => { + tmp = format!("{}", b); + tmp.as_str() + } Node::Int(i) => { tmp = format!("{}", i); tmp.as_str() @@ -203,9 +206,7 @@ impl Operator { token::Kind::Minus => Ok(Operator::Minus), token::Kind::MinusEq => Ok(Operator::MinusEq), token::Kind::Asterisk => Ok(Operator::Asterisk), - token::Kind::AsteriskAsterisk => Ok(Operator::AsteriskAsterisk), token::Kind::AsteriskEq => Ok(Operator::AsteriskEq), - token::Kind::AsteriskAsteriskEq => Ok(Operator::AsteriskAsteriskEq), token::Kind::Slash => Ok(Operator::Slash), token::Kind::SlashEq => Ok(Operator::SlashEq), token::Kind::Percent => Ok(Operator::Percent), @@ -243,9 +244,7 @@ impl Operator { Operator::Minus => "-", Operator::MinusEq => "-=", Operator::Asterisk => "*", - Operator::AsteriskAsterisk => "**", Operator::AsteriskEq => "*=", - Operator::AsteriskAsteriskEq => "**=", Operator::Slash => "/", Operator::SlashEq => "/=", Operator::Percent => "%", diff --git a/src/lex/mod.rs b/src/lex/mod.rs index c8435d3..b744d8d 100644 --- a/src/lex/mod.rs +++ b/src/lex/mod.rs @@ -35,14 +35,16 @@ const fn kw(raw: &'static str, kind: token::Kind) -> KeywordMap { KeywordMap { raw, kind } } -static KEYWORDS: [KeywordMap; 8] = [ - kw("else", token::Kind::ElseKeyword), +static KEYWORDS: [KeywordMap; 10] = [ kw("depend", token::Kind::DependKeyword), + kw("else", token::Kind::ElseKeyword), + kw("false", token::Kind::FalseKeyword), kw("if", token::Kind::IfKeyword), kw("include", token::Kind::IncludeKeyword), kw("set", token::Kind::SetKeyword), kw("source", token::Kind::SourceKeyword), kw("target", token::Kind::TargetKeyword), + kw("true", token::Kind::TrueKeyword), kw("type", token::Kind::TypeKeyword), ]; diff --git a/src/lex/token.rs b/src/lex/token.rs index c25c380..7d88d9e 100644 --- a/src/lex/token.rs +++ b/src/lex/token.rs @@ -68,13 +68,15 @@ pub enum Kind { Percent, PercentEq, - ElseKeyword, DependKeyword, + ElseKeyword, + FalseKeyword, IfKeyword, IncludeKeyword, - TargetKeyword, SetKeyword, SourceKeyword, + TargetKeyword, + TrueKeyword, TypeKeyword, StringLiteral,