Revamp file reading and error messages

This commit is contained in:
Douglas Clowes
2014-09-29 14:37:46 +10:00
parent 334d9d0e0c
commit aa29f85d14

View File

@ -33,14 +33,6 @@ import os
import ply.lex as lex
import ply.yacc as yacc
global Verbose
global DriverDump
global CodeDump
global FunctionTypes
global DriveableFunctionTypes
global NumberOfLinesIn
global NumberOfLinesOut
states = (
('tcl', 'exclusive'),
)
@ -63,11 +55,33 @@ DriveableFunctionTypes = [
Verbose = False
DriverDump = False
CodeDump = False
PrintedFileName = -1
NumberOfLinesIn = 0
NumberOfLinesOut = 0
SourceFileList = []
SourceLineList = []
def PrintParseError(message):
global PrintedFileName
global lexer
global SourceData
curr_line = lexer.lineno
curr_file = SourceLineList[curr_line - 1][0]
if curr_file != PrintedFileName:
PrintedFileName = curr_file
SourceFile = SourceFileList[curr_file]
print "in", SourceFile
print message
print "%4d:" % SourceLineList[curr_line - 1][1], SourceData[curr_line - 1]
def PrintPostError(message):
global PrintedFileName
global SourceLineList
curr_file = 0
if curr_file != PrintedFileName:
PrintedFileName = curr_file
SourceFile = SourceFileList[curr_file]
print "in", SourceFile
print message
#
@ -1783,11 +1797,46 @@ def process_drivers(TheDrivers):
dump_driver(MyDriver)
generate_driver(MyDriver)
def load_file(source_file, depth_list):
global SourceFileList, SourceLineList
# find the file and set the name
SourceFile = os.path.realpath(os.path.abspath(source_file))
if not os.path.isfile(SourceFile):
#print source_file, SourceFile, SourceFileList
if len(SourceFileList) > 0:
trial_name = os.path.join(os.path.dirname(SourceFileList[0]), source_file)
#print trial_name
if os.path.isfile(trial_name):
SourceFile = os.path.realpath(os.path.abspath(trial_name))
SourceFileList.append(SourceFile)
curr_file = len(SourceFileList) - 1
fd = open(SourceFile, 'r')
LocalData = []
line_no = 0
for line in fd:
line_no += 1
line = line.rstrip('\n')
LocalData.append(line)
SourceLineList.append((curr_file, line_no))
fd.close()
return LocalData
def dump_source_files(data):
print "SourceFileList:", SourceFileList
print "SourceLineList:", SourceLineList
curr_file = -1
for line_no, line in enumerate(data):
if SourceLineList[line_no][0] != curr_file:
curr_file = SourceLineList[line_no][0]
print "File:", SourceFileList[curr_file]
print "%4d:" % SourceLineList[line_no][1], line
def process_source(source_files):
global lexer, yaccer
global PathName
global PathName, SourceFile
global TheDrivers
global NumberOfLinesIn
global SourceData
TheDrivers = {}
@ -1805,12 +1854,10 @@ def process_source(source_files):
for source_file in source_files:
PathName = os.path.realpath(os.path.abspath(os.path.dirname(source_file)))
fd = open(source_file, 'r')
data = fd.read()
fd.close()
NumberOfLinesIn = data.count('\n')
SourceData = load_file(source_file, [])
NumberOfLinesIn = len(SourceData)
start_line = lexer.lineno
yaccer.parse(data)
yaccer.parse('\n'.join(SourceData))
stop_line = lexer.lineno
if Verbose:
print 'Consumed file %s with %d lines (%d, %d)' % \
@ -1818,6 +1865,8 @@ def process_source(source_files):
lexer.lineno = 1
process_drivers(TheDrivers)
if args.list:
dump_source_files(SourceData)
def main():
global Verbose
@ -1832,6 +1881,8 @@ def main():
action="store_true")
parser.add_argument("-d", "--driver", help="dump driver",
action="store_true")
parser.add_argument("-l", "--list", help="list output",
action="store_true")
parser.add_argument("-m", "--move", help="generate move commands",
action="store_true")
parser.add_argument("-v", "--verbose", help="verbose output",