First cut at include files.
Chris Pressey
3 years ago
16 | 16 |
import traceback
|
17 | 17 |
|
18 | 18 |
from sixtypical.symtab import SymbolTable
|
19 | |
from sixtypical.parser import Parser, merge_programs
|
|
19 |
from sixtypical.parser import Parser, load_program, merge_programs
|
20 | 20 |
from sixtypical.analyzer import Analyzer
|
21 | 21 |
from sixtypical.callgraph import construct_callgraph, prune_unreachable_routines
|
22 | 22 |
from sixtypical.outputter import outputter_class_for
|
|
29 | 29 |
programs = []
|
30 | 30 |
|
31 | 31 |
for filename in options.filenames:
|
32 | |
text = open(filename).read()
|
33 | |
parser = Parser(symtab, text, filename)
|
|
32 |
program = load_program(filename, symtab)
|
34 | 33 |
if options.debug:
|
35 | 34 |
print(symtab)
|
36 | |
program = parser.program()
|
37 | 35 |
programs.append(program)
|
38 | 36 |
|
39 | 37 |
if options.parse_only:
|
95 | 95 |
def program(self):
|
96 | 96 |
defns = []
|
97 | 97 |
routines = []
|
|
98 |
includes = []
|
|
99 |
while self.scanner.consume('include'):
|
|
100 |
filename = self.scanner.token
|
|
101 |
self.scanner.scan()
|
|
102 |
program = load_program(filename, self.symtab)
|
|
103 |
includes.append(program)
|
98 | 104 |
while self.scanner.on('typedef', 'const'):
|
99 | 105 |
if self.scanner.on('typedef'):
|
100 | 106 |
self.typedef()
|
|
469 | 475 |
# - - - -
|
470 | 476 |
|
471 | 477 |
|
|
478 |
def load_program(filename, symtab):
|
|
479 |
text = open(filename).read()
|
|
480 |
parser = Parser(symtab, text, filename)
|
|
481 |
program = parser.program()
|
|
482 |
return program
|
|
483 |
|
|
484 |
|
472 | 485 |
def merge_programs(programs):
|
473 | 486 |
"""Assumes that the programs do not have any conflicts."""
|
474 | 487 |
|