Fix apply bug with keyword
This commit is contained in:
		
							parent
							
								
									edeff67edb
								
							
						
					
					
						commit
						cd3487dd81
					
				
					 1 changed files with 8 additions and 4 deletions
				
			
		
							
								
								
									
										12
									
								
								parser.ml
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								parser.ml
									
										
									
									
									
								
							|  | @ -80,6 +80,10 @@ let token_to_op tok = | |||
| let token_is_operator tok = | ||||
|   Hashtbl.mem operators tok | ||||
| 
 | ||||
| let is_keyword = function | ||||
|   | "if" | "then" | "else" | "let" -> true | ||||
|   | _ -> false | ||||
| 
 | ||||
| (* common parsers *) | ||||
| 
 | ||||
| let any seq = | ||||
|  | @ -175,13 +179,12 @@ and let_value seq = | |||
| *) | ||||
| and expr pre seq = | ||||
|   seq |> oneof [ | ||||
|     (either unary value) @> binop pre; | ||||
|     ifexpr; | ||||
|     oneof [apply; unary; value] @> binop pre; | ||||
|     level; | ||||
|     assoc; | ||||
|     lambda; | ||||
|     extern_value; | ||||
|     apply; | ||||
|   ] | ||||
| 
 | ||||
| (* level := "level" {"get" | "set"} [op] *) | ||||
|  | @ -260,6 +263,7 @@ and value seq = | |||
|   match seq () with | ||||
|   | Seq.Nil -> raise End_of_tokens | ||||
|   | Seq.Cons (x, seq) -> begin match x with | ||||
|       | Ident id when is_keyword id -> failwith "value" | ||||
|       | Ident "true" -> Nbool true, seq | ||||
|       | Ident "false" -> Nbool false, seq | ||||
|       | Ident id -> Var id, seq | ||||
|  | @ -293,8 +297,8 @@ and binop pre left seq = | |||
|         else | ||||
|           left, Seq.cons x seq | ||||
| 
 | ||||
|       | RParen | Ident "then" | Ident "else" -> | ||||
|         left, Seq.cons x seq | ||||
|       | RParen -> left, Seq.cons x seq | ||||
|       | Ident id when is_keyword id -> left, Seq.cons x seq | ||||
|       | _ -> unexpected_token x | ||||
|     end | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue