summaryrefslogtreecommitdiff
path: root/src/scan_states.py
blob: ef159feb37568a8a853c77cd1b7806389d10254e (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
#!/usr/bin/env python
# python script to generate an overview of the states 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("static const char *stateToString(int state)")
        print("{")
        print("  switch(state)")
        print("  {")
        print("    case INITIAL: return \"INITIAL\";")

        with open(lex_file) as f:
            for line in f:
                if re.search(r'^%x', line) or  re.search(r'^%s', line):
                    state = line.split()[1]
                    print("    case %s: return \"%s\";" % (state,state))
                elif re.search(r'^%%', line):
                    break
                else:
                    pass
            f.close()
        #write post
        print("  }")
        print("  return \"Unknown\";")
        print("}")

if __name__ == '__main__':
    main()