Fix several bugs to get Python scanner/parser basically working, processes ../tests...
[pilex.git] / pilex.py
1 #!/usr/bin/env python3
2
3 import ast
4 import element
5 import generate_flex
6 import generate_py
7 import getopt
8 import os
9 import sys
10
11 home_dir = os.path.dirname(sys.argv[0])
12 try:
13   opts, args = getopt.getopt(
14     sys.argv[1:],
15     'eo:pS:',
16     ['element', 'outfile=', 'python', 'skel=']
17   )
18 except getopt.GetoptError as err:
19   sys.stderr.write('{0:s}\n'.format(str(err)))
20   sys.exit(1)
21
22 out_file = None
23 _element = False
24 python = False
25 skel_file = None
26 for opt, arg in opts:
27   if opt == '-e' or opt == '--element':
28     _element = True
29   elif opt == '-o' or opt == '--outfile':
30     out_file = arg
31   elif opt == '-p' or opt == '--python':
32     python = True
33   elif opt == '-S' or opt == '--skel':
34     skel_file = arg
35   else:
36     assert False
37 if len(args) < 1:
38   sys.stdout.write(
39     'usage: {0:s} [options] rules.l\n'.format(
40       sys.argv[0]
41     )
42   )
43   sys.exit(1)
44 in_file = args[0]
45
46 with open(in_file) as fin:
47   _ast = element.deserialize(fin, ast.factory)
48 #element.serialize(_ast, 'a.xml', 'utf-8')
49 #_ast = element.deserialize('a.xml', ast.factory, 'utf-8')
50 _ast.post_process()
51 #element.serialize(_ast, 'b.xml', 'utf-8')
52 #_ast = element.deserialize('b.xml', ast.factory, 'utf-8')
53 (generate_py.generate_py if python else generate_flex.generate_flex)(
54   _ast,
55   _element,
56   home_dir,
57   skel_file,
58   out_file
59 )