From ea05c9c5fa30b8822f618e861d12a09df1f8f017 Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Mon, 28 May 2012 13:00:50 +1000 Subject: Fix memory error and x = max(-inf, expr) stuff. --- impl/EquationSystem.g | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'impl/EquationSystem.g') diff --git a/impl/EquationSystem.g b/impl/EquationSystem.g index 6db7045..3a6598a 100644 --- a/impl/EquationSystem.g +++ b/impl/EquationSystem.g @@ -3,27 +3,34 @@ grammar EquationSystem; options { language=C; output=AST; + backtrack=true; } tokens { - SYSTEM = 'system' ; PLUS = '+' ; SUB = '-' ; MULT = '*' ; + COMMA = ';' ; + GUARD = 'guard' ; + GREATER_EQUAL = '>=' ; + QUESTION_MARK = '?' ; MAXIMUM = 'max' ; MINIMUM = 'min' ; NEWLINE = '\n' ; } -equation_system : equation ( NEWLINE! + equation )* (NEWLINE!) *; -equation : VARIABLE '='! maxExpr; +equation_system : equation ( NEWLINE! + equation )* (NEWLINE!)* ; +equation : VARIABLE '='! maxExpr ; -maxExpr : MAXIMUM^ '('! minExpr ( ','! minExpr )* ')'! | minExpr; +maxExpr : MAXIMUM^ '('! minExpr ( ','! minExpr )* ')'! | minExpr ; minExpr : MINIMUM^ '('! maxExpr ( ','! maxExpr )* ')'! | expr ; -expr : term ( (PLUS | MULT | SUB)^ term )* ; +expr : '(' expr GREATER_EQUAL expr QUESTION_MARK expr ')' -> ^(GUARD expr expr expr) + | term ( (PLUS | MULT | SUB | COMMA)^ expr )* ; -term : NUMBER | VARIABLE ; +term : NUMBER + | VARIABLE + | '('! expr ')'! ; NUMBER : (DIGIT)+ ; -- cgit v1.2.3