diff options
author | albert-github <albert.tests@gmail.com> | 2019-09-05 12:04:14 (GMT) |
---|---|---|
committer | albert-github <albert.tests@gmail.com> | 2019-09-05 12:04:14 (GMT) |
commit | aca16ea3b4e4beef9bf067d0b532dfa3802f7a3d (patch) | |
tree | 9c040ab60c4d6f7c1bd3503abb1b2f6d219d86f2 /src/scan_states.py | |
parent | 98cc801013b16d827d91567998ead7b24fd78b6d (diff) | |
download | Doxygen-aca16ea3b4e4beef9bf067d0b532dfa3802f7a3d.zip Doxygen-aca16ea3b4e4beef9bf067d0b532dfa3802f7a3d.tar.gz Doxygen-aca16ea3b4e4beef9bf067d0b532dfa3802f7a3d.tar.bz2 |
Consistent way to show scanner state
Create a consistent way to display the state mnemonics of the different scanners (analogous to the fortranscanner.l)
Use an automatic procedure to generate the routine with the translation of the states to a string.
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() |