|
@@ -294,7 +294,18 @@ class Parser(object):
|
|
|
self.input = text
|
|
|
results = self.applyrule('@start', 0)
|
|
|
print("Results: " + str(len(results)))
|
|
|
- if (results == [] or results[0]['endpos'] < len(self.input)):
|
|
|
+ if len(results) > 1:
|
|
|
+ # Handle ambiguity
|
|
|
+ from prettyprint_visitor import PrettyPrintVisitor
|
|
|
+ for p in results:
|
|
|
+ print("===================================")
|
|
|
+ print("VISIT RESULT")
|
|
|
+ print("===================================")
|
|
|
+ visitor = PrettyPrintVisitor([])
|
|
|
+ visitor.visit(p["tree"])
|
|
|
+ print(visitor.dump())
|
|
|
+ result = self.generateErrorReport()
|
|
|
+ elif (results == [] or results[0]['endpos'] < len(self.input)):
|
|
|
result = self.generateErrorReport()
|
|
|
for elem in result['partialresults']: #Added by Daniel there was no post processing on partial results. I need it
|
|
|
if elem['tree']: #with partial results the tree can be None
|
|
@@ -303,7 +314,7 @@ class Parser(object):
|
|
|
# elem['tree'].startpos = 0
|
|
|
# elem['tree'].endpos = 0
|
|
|
elem['tree'] = Parser.PositionPostProcessor(self.convertToLineColumn).visit(elem['tree']) #Added by Daniel
|
|
|
- else:
|
|
|
+ elif len(results) == 1:
|
|
|
result = results[0]
|
|
|
result.update({'status': Parser.Constants.Success})
|
|
|
if result['tree'].head != 'start':
|
|
@@ -820,8 +831,6 @@ class Parser(object):
|
|
|
if (newresults == []):
|
|
|
return []
|
|
|
newresults = self.merge('.', newresults, elem_p)
|
|
|
- r.extend(newresults)
|
|
|
- newresults = r
|
|
|
results = newresults
|
|
|
return results
|
|
|
|