44
55from __future__ import annotations
66from collections import deque
7- from collections .abc import Iterator , Sequence
7+ from collections .abc import Iterator
88from itertools import chain
99from lambda_calculus .terms import Abstraction , Application , Term , Variable
1010from lark import Lark , Token
@@ -63,6 +63,10 @@ def __default__(self, data: object, children: object, meta: object) -> Term[str]
6363 """handle unknown nodes"""
6464 raise UnexpectedInput (f"unknown node: { data } " )
6565
66+ def __default_token__ (self , token : Token ) -> Token :
67+ """handle unknown tokens"""
68+ raise UnexpectedInput (f"unknown token: { token } " )
69+
6670 def VARIABLE (self , name : Token ) -> Variable [str ]:
6771 """transform a variable node"""
6872 return Variable (name .value )
@@ -72,9 +76,10 @@ def abstraction(self, variable: Variable[str], body: Term[str]) -> Abstraction[s
7276 """transform an abstraction"""
7377 return Abstraction (variable .name , body )
7478
75- def application (self , children : Sequence [Term [str ]]) -> Application [str ]:
79+ @v_args (inline = True )
80+ def application (self , abstraction : Term [str ], argument : Term [str ]) -> Application [str ]:
7681 """transform an application"""
77- return Application . with_arguments ( children [ 0 ], children [ 1 :] )
82+ return Application ( abstraction , argument )
7883
7984
8085PARSER = Lark .open_from_package (
0 commit comments