我目前正在尝试为编程语言编写一个(非常)小的解释器/编译器。我已经为该语言设置了语法,现在我需要写下该语言的语法。我打算使用LL(1)解析器,因为经过一些研究后,它似乎是最容易使用的。写入正确的LL(1)语法?
我是这个领域的新手,但是从我收集的内容来看,强烈推荐使用BNF或EBNF来形式化语法。但是,似乎并非所有语法都适合使用LL(1)解析器来实现。因此,我想知道以LL(1)形式编写文法的正确(或推荐)方法是什么。
谢谢你的帮助, 查理。
PS:我打算使用Haskell的Parsec库编写解析器。编辑:此外,根据SK逻辑,Parsec可以处理一个无限的前瞻(LL(k)?) - 但我想这个问题仍然代表了这种类型的语法。
秒差距能够无限先行的。出于表现以外的原因,您不需要限制LL(1)。 – 2011-02-18 14:00:19
它不一定是LL(k),它可以是上下文相关的。所以,你唯一需要担心的是避免左递归。 – 2011-02-18 14:09:35