summaryrefslogtreecommitdiff
path: root/src/mem/slicc/parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/slicc/parser.py')
-rw-r--r--src/mem/slicc/parser.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/mem/slicc/parser.py b/src/mem/slicc/parser.py
index 78b842f74..96e029ecf 100644
--- a/src/mem/slicc/parser.py
+++ b/src/mem/slicc/parser.py
@@ -132,6 +132,7 @@ class SLICC(Grammar):
'LEFTSHIFT', 'RIGHTSHIFT',
'NOT', 'AND', 'OR',
'PLUS', 'DASH', 'STAR', 'SLASH',
+ 'INCR', 'DECR',
'DOUBLE_COLON', 'SEMI',
'ASSIGN', 'DOT',
'IDENT', 'LIT_BOOL', 'FLOATNUMBER', 'NUMBER', 'STRING' ]
@@ -156,8 +157,11 @@ class SLICC(Grammar):
t_SEMI = r';'
t_ASSIGN = r':='
t_DOT = r'\.'
+ t_INCR = r'\+\+'
+ t_DECR = r'--'
precedence = (
+ ('left', 'INCR', 'DECR'),
('left', 'AND', 'OR'),
('left', 'EQ', 'NE'),
('left', 'LT', 'GT', 'LE', 'GE'),
@@ -670,8 +674,10 @@ class SLICC(Grammar):
# FIXME - unary not
def p_expr__unary_op(self, p):
"""expr : NOT expr
+ | INCR expr
+ | DECR expr
| DASH expr %prec UMINUS"""
- p[0] = PrefixOperatorExpr(p[1], p[2])
+ p[0] = ast.PrefixOperatorExprAST(self, p[1], p[2])
def p_expr__parens(self, p):
"aexpr : '(' expr ')'"