ソースを参照

Fixed bug in parser, but now multiple choices are always possible: which
do we pick?

Yentl Van Tendeloo 8 年 前
コミット
19697a64cb

+ 4 - 0
interface/HUTN/hutn_compiler/hutnparser.py

@@ -293,6 +293,7 @@ class Parser(object):
         self.reset() #Changed by Daniel receive text as param. instead of once at init so first we reset the fields
         self.input = text
         results = self.applyrule('@start', 0)
+        print("Results: " + str(len(results)))
         if (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
@@ -810,6 +811,7 @@ class Parser(object):
                     return []
                 newresults = self.merge('.', newresults, {'startpos': j, 'endpos': j})
             else:
+                r = []
                 for elem_p in results:
                     if (isinstance(rule_i, list)):
                         newresults = self.eval_body('.', rule_i, elem_p['endpos'])
@@ -818,6 +820,8 @@ class Parser(object):
                     if (newresults == []):
                         return []
                     newresults = self.merge('.', newresults, elem_p)
+                    r.extend(newresults)
+                newresults = r
             results = newresults
         return results
 

+ 2 - 2
interface/HUTN/test/constructor_compilation_action_language/test_compile.py

@@ -67,5 +67,5 @@ class TestCompile(unittest.TestCase):
     def test_factorial(self):
         compile_file(self, "factorial.al")
 
-    #def test_strange_return(self):
-    #    compile_file(self, "strange_return.al")
+    def test_strange_return(self):
+        compile_file(self, "strange_return.al")