From ee0d414fa8dac2371b439778374ec585b358e549 Mon Sep 17 00:00:00 2001 From: David Hashe Date: Mon, 20 Jul 2015 09:15:18 -0500 Subject: slicc: support for transitions with a wildcard next state This patches adds support for transitions of the form: transition(START, EVENTS, *) { ACTIONS } This allows a machine to collapse states that differ only in the next state transition to collapse into one, and can help shorten/simplfy some protocols significantly. When * is encountered as an end state of a transition, the next state is determined by calling the machine-specific getNextState function. The next state is determined before any actions of the transition execute, and therefore the next state calculation cannot depend on any of the transition actions. --- src/mem/slicc/parser.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/mem/slicc/parser.py') diff --git a/src/mem/slicc/parser.py b/src/mem/slicc/parser.py index 10dd99ece..1ce8bf1bd 100644 --- a/src/mem/slicc/parser.py +++ b/src/mem/slicc/parser.py @@ -278,7 +278,7 @@ class SLICC(Grammar): p[0] = ast.OutPortDeclAST(self, p[3], p[5], p[7], p[8]) def p_decl__trans0(self, p): - "decl : TRANS '(' idents ',' idents ',' ident ')' idents" + "decl : TRANS '(' idents ',' idents ',' ident_or_star ')' idents" p[0] = ast.TransitionDeclAST(self, [], p[3], p[5], p[7], p[9]) def p_decl__trans1(self, p): @@ -286,7 +286,7 @@ class SLICC(Grammar): p[0] = ast.TransitionDeclAST(self, [], p[3], p[5], None, p[7]) def p_decl__trans2(self, p): - "decl : TRANS '(' idents ',' idents ',' ident ')' idents idents" + "decl : TRANS '(' idents ',' idents ',' ident_or_star ')' idents idents" p[0] = ast.TransitionDeclAST(self, p[9], p[3], p[5], p[7], p[10]) def p_decl__trans3(self, p): @@ -506,6 +506,11 @@ class SLICC(Grammar): "ident : IDENT" p[0] = p[1] + def p_ident_or_star(self, p): + """ident_or_star : ident + | STAR""" + p[0] = p[1] + # Pair and pair lists def p_pairs__list(self, p): "pairs : ',' pairsx" -- cgit v1.2.3