summaryrefslogtreecommitdiffhomepage
path: root/tools/dfagen/dfagen
diff options
context:
space:
mode:
Diffstat (limited to 'tools/dfagen/dfagen')
-rw-r--r--tools/dfagen/dfagen/parser.g29
1 files changed, 28 insertions, 1 deletions
diff --git a/tools/dfagen/dfagen/parser.g b/tools/dfagen/dfagen/parser.g
index e510ed22..1e19bcc4 100644
--- a/tools/dfagen/dfagen/parser.g
+++ b/tools/dfagen/dfagen/parser.g
@@ -11,19 +11,32 @@ parser AutomatonParser:
token QUALIFIER: "\w([\w ]*\w)?"
token ATITLE: ".*?\n"
token ATTR: "\w([\w =]*\w)?"
+ token IMPORT: "[\w./]+"
rule automaton: ATITLE {{ a = Automaton (ATITLE.strip ()) }}
( comments {{ a.comments = comments }}
) ?
+ automatondef<<a>>
+ EOF {{ return a }}
+
+ rule automatonsub<<a>>:
+ ATITLE
+ ( comments ) ?
+ automatondef<<a>>
+ EOF
+
+ rule automatondef<<a>>:
+ ( importdef<<a>> ) *
"States:\n"
( statedef {{ a.add_state (statedef) }}
) *
+ ( importdef<<a>> ) *
"Events:\n"
( eventdef {{ a.add_event (eventdef) }}
) *
+ ( importdef<<a>> ) *
( transdef<<a>>
) *
- EOF {{ return a }}
rule statedef: {{ initial = False }}
" " ( "\*" {{ initial = True }}
@@ -70,3 +83,17 @@ parser AutomatonParser:
( COMMENTS {{ c += '\n' + COMMENTS.strip () }}
) * {{ return c }}
+ rule importdef<<a>>:
+ "import\s+"
+ IMPORT {{ import_automaton (IMPORT, a) }}
+ "\n"
+
+%%
+
+def import_automaton (import_file, a):
+ f = open (import_file, 'r')
+ text = f.read ()
+ f.close ()
+ P = AutomatonParser (AutomatonParserScanner (text))
+ return runtime.wrap_error_reporter (P, 'automatonsub', a)
+