summaryrefslogtreecommitdiff
path: root/tools/trace/lib/parser.g
diff options
context:
space:
mode:
Diffstat (limited to 'tools/trace/lib/parser.g')
-rw-r--r--tools/trace/lib/parser.g32
1 files changed, 32 insertions, 0 deletions
diff --git a/tools/trace/lib/parser.g b/tools/trace/lib/parser.g
new file mode 100644
index 00000000..2cee66b5
--- /dev/null
+++ b/tools/trace/lib/parser.g
@@ -0,0 +1,32 @@
+import sys
+
+from traceclass import *
+
+%%
+
+parser TraceParser:
+ ignore: "(#.*?)?\n"
+ token START: "^"
+ token EOF: "$"
+ token EVENT: "[a-zA-Z_]+"
+ token PARAM: "[a-zA-Z_1-9]+"
+ token LENGTH: "[1-2-4]"
+ token STRING: "\".*\""
+ token SPACE: " "
+
+ rule parser: START {{ my_list = list() }}
+ (event {{ my_list.append (event) }}
+ )*
+ EOF {{ return my_list }}
+
+ rule event: "EVENT " EVENT {{ e = TraceEvent(EVENT.strip()) }}
+ SPACE
+ ( param SPACE {{ e.param_add (param[0], param[1]) }}
+ )*
+ ( string {{ e.string_set (string) }}
+ )*
+ "\n" {{ return e }}
+
+ rule param: PARAM SPACE LENGTH {{ return [PARAM.strip(), int(LENGTH.strip())] }}
+
+ rule string: STRING {{ return (STRING.strip()) }}