Compare commits
	
		
			3 Commits
		
	
	
		
			1a181095c6
			...
			a22bc69491
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a22bc69491 | |||
| ca495dfd9e | |||
| 312f4cd125 | 
							
								
								
									
										9
									
								
								examples/lists.spf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								examples/lists.spf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| liste premier = [1, 2, 3]; | ||||
|  | ||||
| ajouter 4 dans premier; | ||||
|  | ||||
| liste deuxieme = [1:4]; | ||||
|  | ||||
| liste troisième = [deuxieme[0]: 10]; | ||||
|  | ||||
| liste quatrième = [1: troisième[6]]; | ||||
| @ -49,19 +49,19 @@ class Variables: | ||||
|         self.trace = trace | ||||
|  | ||||
|     def get(self, name): | ||||
|         assert name in self.variables, "la variable {name} n'éxiste pas" | ||||
|         assert name in self.variables, f"la variable {name} n'éxiste pas" | ||||
|         if self.trace: | ||||
|             print(f"{trace_format}accède {name}{reset_format}", file=sys.stderr) | ||||
|         return self.variables[name].value | ||||
|  | ||||
|     def declare(self, typ, name, value=None): | ||||
|         assert name not in self.variables, "la variable {name} existe déjà" | ||||
|         assert name not in self.variables, f"la variable {name} existe déjà" | ||||
|         self.variables[name] = self.Variable(typ, value) | ||||
|         if self.trace: | ||||
|             print(f"{trace_format}déclare {name} = {value}{reset_format}", file=sys.stderr) | ||||
|  | ||||
|     def assign(self, name, value): | ||||
|         assert name in self.variables, "la variable n'éxiste pas" | ||||
|         assert name in self.variables, f"la variable n'éxiste pas" | ||||
|         self.variables[name].set(value) | ||||
|         if self.trace: | ||||
|             print(f"{trace_format}modifie {name} = {value}{reset_format}", file=sys.stderr) | ||||
|  | ||||
							
								
								
									
										2
									
								
								spf.lark
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								spf.lark
									
									
									
									
									
								
							| @ -55,7 +55,7 @@ loop: "tant" "que" expression "faire" "{" instruction_seq "}" -> while_loop | ||||
|  | ||||
| list: "[" expression? ("," expression)* "]"  | ||||
|  | ||||
| range: "[" expression? ":" expression? "]" | ||||
| range: "[" expression ":" expression "]" | ||||
|  | ||||
| controls: test | ||||
| 		| loop | ||||
|  | ||||
							
								
								
									
										6
									
								
								spf.py
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								spf.py
									
									
									
									
									
								
							| @ -111,7 +111,7 @@ class SPFInterpreter(lark.visitors.Interpreter): | ||||
|  | ||||
|     def list_get(self, el): | ||||
|         (left, right) = self.visit_children(el) | ||||
|         return left[right] | ||||
|         return left[right-1] | ||||
|  | ||||
|  | ||||
|     def expression(self, el): | ||||
| @ -136,6 +136,10 @@ class SPFInterpreter(lark.visitors.Interpreter): | ||||
|     true = lambda self, _: True | ||||
|     false = lambda self, _: False | ||||
|  | ||||
|     def range(self, el): | ||||
|         (left, right) = self.visit_children(el) | ||||
|         return list(range(left, right+1)) | ||||
|  | ||||
|     def dump(self): | ||||
|         self.variables.dump() | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	