From c4fc36bb5c58c25cd0936ed5e3d8b0db76eb9c55 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 6 Oct 2010 20:36:48 +0000 Subject: [PATCH] added <= and >= operators git-svn-id: svn://anubis/fart/trunk@345 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- parser/nodes.cc | 6 ++++++ parser/parser.lex | 3 ++- parser/parser.yy | 8 ++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/parser/nodes.cc b/parser/nodes.cc index ba934b9..65bd12b 100644 --- a/parser/nodes.cc +++ b/parser/nodes.cc @@ -95,9 +95,15 @@ NodeRef BoolExpressionNode::evaluate() case '<': r = o < t ? 0 : 1; break; + case 'l': + r = o <= t ? 0 : 1; + break; case '>': r = o > t ? 0 : 1; break; + case 'g': + r = o >= t ? 0 : 1; + break; case '=': r = o == t ? 0 : 1; break; diff --git a/parser/parser.lex b/parser/parser.lex index 112fd89..3ea85aa 100644 --- a/parser/parser.lex +++ b/parser/parser.lex @@ -38,7 +38,8 @@ \( return LPAREN; \) return RPAREN; \< return LESS; -\> return GREATER; +\<= return LESSEQ; +\>= return GREATEREQ; [0-9]+ *yylval = new NumberNode(atof(yytext)); return REAL_NUMBER; [0-9]*\.[0-9]+ *yylval = new NumberNode(atof(yytext)); return REAL_NUMBER; diff --git a/parser/parser.yy b/parser/parser.yy index 16f4cd6..c42cbd4 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -59,7 +59,9 @@ refptr parser_scope; %token LPAREN; %token RPAREN; %token LESS; +%token LESSEQ; %token GREATER; +%token GREATEREQ; %token REAL_NUMBER; @@ -603,9 +605,15 @@ stmt_expression: assignment { $$ = $1; } bool_expression: expression LESS expression { $$ = new BoolExpressionNode('<', $1, $3); } + | expression LESSEQ expression { + $$ = new BoolExpressionNode('l', $1, $3); + } | expression GREATER expression { $$ = new BoolExpressionNode('>', $1, $3); } + | expression GREATEREQ expression { + $$ = new BoolExpressionNode('g', $1, $3); + } | expression EQUALS expression { $$ = new BoolExpressionNode('=', $1, $3); }