summaryrefslogtreecommitdiffstats
path: root/src/scan_states.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/scan_states.py')
-rw-r--r--src/scan_states.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/scan_states.py b/src/scan_states.py
new file mode 100644
index 0000000..7f69fdd
--- /dev/null
+++ b/src/scan_states.py
@@ -0,0 +1,53 @@
+#!/usr/bin/python
+# python script to generate an overview of the staes based on the input lex file.
+#
+# Copyright (C) 1997-2019 by Dimitri van Heesch.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation under the terms of the GNU General Public License is hereby
+# granted. No representations are made about the suitability of this software
+# for any purpose. It is provided "as is" without express or implied warranty.
+# See the GNU General Public License for more details.
+#
+# Documents produced by Doxygen are derivative works derived from the
+# input used in their production; they are not affected by this license.
+#
+import sys
+import os
+import re
+
+
+def main():
+ if len(sys.argv)!=2:
+ sys.exit('Usage: %s <lex_file>' % sys.argv[0])
+
+ lex_file = sys.argv[1]
+ if (os.path.exists(lex_file)):
+ #write preamble
+ print("#define scanStateToString(x) case x: resultString = #x; break;");
+ print("static const char *stateToString(int state)");
+ print("{");
+ print(" const char *resultString;");
+ print(" switch(state)");
+ print(" {");
+ print(" scanStateToString(INITIAL)");
+
+ with open(lex_file) as f:
+ for line in f:
+ if re.search(r'^%x', line) or re.search(r'^%s', line):
+ print(" scanStateToString(%s)"%line.split()[1]);
+ elif re.search(r'^%%', line):
+ break
+ else:
+ pass
+ f.close()
+ #write post
+ print(" default: resultString = \"Unknown\"; break;")
+ print(" }")
+ print(" return resultString;")
+ print("}")
+
+
+
+if __name__ == '__main__':
+ main()