fix: potential fix for left recursion
This commit is contained in:
parent
1c8f3a736b
commit
74df7f8a7c
|
@ -74,13 +74,25 @@ fn term() -> impl Parser<char, Term<Name>, Error = Simple<char>> {
|
|||
let delay = keyword("delay")
|
||||
.ignore_then(term.clone().padded())
|
||||
.delimited_by(just('(').padded(), just(')').padded())
|
||||
.map(|t| Term::Delay(Box::new(t)));
|
||||
.map(|t| dbg!(Term::Delay(Box::new(t))));
|
||||
|
||||
let force = keyword("force")
|
||||
.ignore_then(term.clone().padded())
|
||||
.delimited_by(just('(').padded(), just(')').padded())
|
||||
.map(|t| Term::Force(Box::new(t)));
|
||||
.map(|t| dbg!(Term::Force(Box::new(t))));
|
||||
|
||||
let lambda = keyword("lam")
|
||||
.ignore_then(name().padded())
|
||||
.then(term.clone())
|
||||
.delimited_by(just('(').padded(), just(')').padded())
|
||||
.map(|(parameter_name, t)| {
|
||||
dbg!(Term::Lambda {
|
||||
parameter_name,
|
||||
body: Box::new(t),
|
||||
})
|
||||
});
|
||||
|
||||
let apply = recursive(|a| {
|
||||
let lambda = keyword("lam")
|
||||
.ignore_then(name().padded())
|
||||
.then(term.clone())
|
||||
|
@ -90,14 +102,16 @@ fn term() -> impl Parser<char, Term<Name>, Error = Simple<char>> {
|
|||
body: Box::new(t),
|
||||
});
|
||||
|
||||
let apply = term
|
||||
.clone()
|
||||
var()
|
||||
.or(lambda)
|
||||
.or(a.delimited_by(just('[').padded(), just(']').padded()))
|
||||
.padded()
|
||||
.then(term)
|
||||
.delimited_by(just('[').padded(), just(']').padded())
|
||||
.map(|(function, argument)| Term::Apply {
|
||||
function: Box::new(function),
|
||||
argument: Box::new(argument),
|
||||
})
|
||||
});
|
||||
|
||||
constant()
|
||||
|
|
Loading…
Reference in New Issue