Fixing loop variables
This commit is contained in:
		
							
								
								
									
										15
									
								
								examples/boucles_var.spf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								examples/boucles_var.spf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| entier x = 0; | ||||
| tant que x < 10 faire { | ||||
| 	entier y = x; | ||||
| 	x = x + 1; | ||||
| 	afficher x, y; | ||||
| } | ||||
|  | ||||
| afficher "yess"; | ||||
|  | ||||
| pour chaque entier i dans [1:5] faire { | ||||
| 	entier y = i; | ||||
| 	y = y + i; | ||||
| 	x = x + i; | ||||
| 	afficher x, y; | ||||
| } | ||||
							
								
								
									
										8
									
								
								spf.lark
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								spf.lark
									
									
									
									
									
								
							| @ -1,10 +1,10 @@ | ||||
| start: (instruction)* | ||||
|  | ||||
| instruction: declaration ";" | ||||
| 		   | assignation ";" | ||||
| 		   | SHOW_KW expression ("," expression)* ";" -> afficher | ||||
| 		   | ADD_KW expression "dans" VARIABLE ";" -> append | ||||
| 		   | controls | ||||
|            | assignation ";" | ||||
|            | SHOW_KW expression ("," expression)* ";" -> afficher | ||||
|            | ADD_KW expression "dans" VARIABLE ";" -> append | ||||
|            | controls | ||||
|  | ||||
| // rule finishing by u are "UnambigiousED" | ||||
| expression: logical | ||||
|  | ||||
							
								
								
									
										4
									
								
								spf.py
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								spf.py
									
									
									
									
									
								
							| @ -19,7 +19,7 @@ class SPFInterpreter(lark.visitors.Interpreter): | ||||
|         old = self.variables.variables.copy() | ||||
|         while self.visit_children(el.children[0])[0]: | ||||
|             self.visit_children(el.children[1]) | ||||
|         self.variables.variables = old.copy() | ||||
|             self.variables.variables = old.copy() | ||||
|  | ||||
|     def for_loop(self, el): | ||||
|         type = el.children[0].value | ||||
| @ -30,6 +30,7 @@ class SPFInterpreter(lark.visitors.Interpreter): | ||||
|         except SPFException as e: | ||||
|             e.errorline = el.meta.line | ||||
|             raise e | ||||
|         old_inloop = self.variables.variables.copy() | ||||
|  | ||||
|         target = self.visit_children(el.children[2])[0] | ||||
|         for i in target: | ||||
| @ -39,6 +40,7 @@ class SPFInterpreter(lark.visitors.Interpreter): | ||||
|                 e.errorline = el.meta.line | ||||
|                 raise e | ||||
|             self.visit_children(el.children[3]) | ||||
|             self.variables.variables = old_inloop.copy() | ||||
|         self.variables.variables = old.copy() | ||||
|  | ||||
|     def afficher(self, el): | ||||
|  | ||||
		Reference in New Issue
	
	Block a user