summaryrefslogtreecommitdiffstats
path: root/src/scan_states.py
blob: 7f69fdda6215a4f8464f461f40a09d7be0183941 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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()