use*_*134 0 compiler-construction haskell lambda-calculus context-free-grammar left-recursion
我正在尝试编写一个lambda演算解析器,我定义的语法似乎不在LLR中:
E ::= x | \x.E | EE | (E)
Run Code Online (Sandbox Code Playgroud)
我减少左递归:
E ::= xE' | \x.EE' | (E)E'
E'::= EE' | <empty>
Run Code Online (Sandbox Code Playgroud)
似乎不对,有人可以帮忙吗?
什么是"LLR"?你的意思是"LL","LR","LALR"?
语言不属于任何一种语言,因为它含糊不清; 在lambda演算中,这种模糊性通常通过假设lambda表达式\x.E尽可能向右延伸来解决.例如,\x.xx解析为as \x.(xx)而不是as (\x.x)x.
通过消除左递归,您似乎正在寻找LL语法.但是,你的语法仍然含糊不清(正如你原来的语法一样,见上文).你需要先解决这个问题.没有更多提示......