|
@@ -70,7 +70,13 @@ def do_parse(inputfile, grammarfile):
|
|
|
if result is None:
|
|
|
result = Parser(grammar, line_position = True).parse(read(inputfile))
|
|
|
if result['status'] != Parser.Constants.Success:
|
|
|
- msg = "%s:%s:%s: %s" % (inputfile, result["line"], result["column"], result["text"])
|
|
|
+ lines = open(inputfile, 'r').readlines()
|
|
|
+ begin_line = max(result["line"] - 3, 0)
|
|
|
+ end_line = min(result["line"] + 3, len(lines))
|
|
|
+ lines = lines[begin_line:end_line]
|
|
|
+ lines = ["%s: %s" % (begin_line + i + 1, line) for i, line in enumerate(lines)]
|
|
|
+ lines = "".join(lines)
|
|
|
+ msg = "%s:%s:%s: %s\nContext:\n%s" % (inputfile, result["line"], result["column"], result["text"], lines)
|
|
|
raise Exception(msg)
|
|
|
make_cached(inputfile, result)
|
|
|
|
|
@@ -104,7 +110,13 @@ def do_compile(inputfile, grammarfile, visitors=[], include_paths = [], mode="")
|
|
|
result = do_parse(inputfile, grammarfile)
|
|
|
error = result["status"] != Parser.Constants.Success
|
|
|
if error:
|
|
|
- msg = "%s:%s:%s: %s" % (inputfile, result["line"], result["column"], result["text"])
|
|
|
+ lines = open(working_file, 'r').readlines()
|
|
|
+ begin_line = max(result["line"] - 3, 0)
|
|
|
+ end_line = max(result["line"] + 3, len(lines))
|
|
|
+ lines = lines[begin_line:end_line]
|
|
|
+ lines = ["%s: %s" % (begin_line + i + 1, line) for i, line in enumerate(lines)]
|
|
|
+ lines = "".join(lines)
|
|
|
+ msg = "%s:%s:%s: %s\nContext:\n%s" % (inputfile, result["line"], result["column"], result["text"], lines)
|
|
|
raise Exception(msg)
|
|
|
else:
|
|
|
for child in result["tree"].tail:
|