diff options
Diffstat (limited to 'src/scan_states.py')
-rw-r--r-- | src/scan_states.py | 53 |
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() |