diff options
author | Carlo Zancanaro <carlo@carlo-laptop> | 2012-05-28 13:00:50 +1000 |
---|---|---|
committer | Carlo Zancanaro <carlo@carlo-laptop> | 2012-05-28 13:00:50 +1000 |
commit | ea05c9c5fa30b8822f618e861d12a09df1f8f017 (patch) | |
tree | cb8717d9773ef77978dc8e1d9093560e3cf26532 /impl/EquationSystem.g | |
parent | ee8547cf3c89c51ff10603814e6f745466bc4c79 (diff) |
Fix memory error and x = max(-inf, expr) stuff.
Diffstat (limited to 'impl/EquationSystem.g')
-rw-r--r-- | impl/EquationSystem.g | 19 |
1 files changed, 13 insertions, 6 deletions
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)+ ; |