From e804f16e7b1ea7608098274fec22f10f297ff333 Mon Sep 17 00:00:00 2001 From: Jonathan Turner Date: Fri, 5 Jun 2009 12:05:37 +0000 Subject: [PATCH] Couple grammar bugfixes for booleans. Made if/while return void. --- wesley/main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wesley/main.cpp b/wesley/main.cpp index 62e4efa..f3d832c 100644 --- a/wesley/main.cpp +++ b/wesley/main.cpp @@ -263,6 +263,7 @@ Boxed_Value eval_token(BoxedCPP_System &ss, TokenPtr node) { } } } + retval = Boxed_Value(); } break; case(TokenType::While_Block) : { @@ -273,6 +274,7 @@ Boxed_Value eval_token(BoxedCPP_System &ss, TokenPtr node) { retval = eval_token(ss, node->children[0]); cond = Cast_Helper()(retval); } + retval = Boxed_Value(); } break; case (TokenType::Function_Def) : { @@ -369,7 +371,7 @@ Rule build_parser_rules() { block >> ~Ign(Id(TokenType::Semicolon)); params = Id(TokenType::Identifier) >> *(Ign(Str(",")) >> Id(TokenType::Identifier)); block = Ign(Id(TokenType::Curly_Open)) >> ~statements >> Ign(Id(TokenType::Curly_Close)); - equation = *(Id(TokenType::Identifier) >> Ign(Str("="))) >> comparison; + equation = *(Id(TokenType::Identifier) >> Ign(Str("="))) >> boolean; boolean = comparison >> *((Str("&&") >> comparison) | (Str("||") >> comparison)); comparison = expression >> *((Str("==") >> expression) | (Str("!=") >> expression) | (Str("<") >> expression) | (Str("<=") >> expression) |(Str(">") >> expression) | (Str(">=") >> expression)); @@ -378,7 +380,7 @@ Rule build_parser_rules() { factor = methodcall | value | negate | (Ign(Str("+")) >> value); funcall = Id(TokenType::Identifier) >> Ign(Id(TokenType::Parens_Open)) >> ~(boolean >> *(Ign(Str("," )) >> boolean)) >> Ign(Id(TokenType::Parens_Close)); methodcall = value >> +(Ign(Str(".")) >> funcall); - negate = Ign(Str("-")) >> factor; + negate = Ign(Str("-")) >> boolean; return_statement = Ign(Str("return")) >> boolean; value = (Ign(Id(TokenType::Parens_Open)) >> boolean >> Ign(Id(TokenType::Parens_Close))) | return_statement |