我正在为我正在编写的网络应用程序编写一种简单的文本模板语言(想想谷歌的 ctemplate)。完成后,它将仅包含少量可能的操作,例如“评估和执行”、“评估和打印”、“评估和转义 html”、“评论”等简单内容。我正在考虑从头开始手工编写整个解析器,但我开始研究像 lex、flex 和 antlr 这样的解析器生成器。这些看起来比我对简单语法的需要要多得多。所以问题是,在什么时候使用解析器生成器是可行的?
问问题
463 次
2 回答
6
宜早不宜迟。如果您现在有一个简单的语法,那么使用解析器生成器很容易。当您想要添加变量、循环和条件时,它更容易。
可是等等!- 几乎没有理由发明自己的语言,除非它是非常特定领域的,如eqn
或TeX
分子建模语言。你最好嵌入一种专门为此目的设计的语言。Tcl是该领域的老兵, Python是一个强有力的竞争者。Perl 也被设计为一种嵌入式脚本语言,但我认为它是一个糟糕的候选者,因为它可能会在用户手中产生非常“只写”的代码。
语言设计很难,把所有繁琐的东西都抽出来更难。使用 Python 和 Tcl,您可以决定向您的用户公开多少核心语言,并在您发现需要它们时打开封闭的部分。
我写的第一个小语言(令人惊讶的是它仍在生产中使用)如果有 Tcl 代替使用会好得多。
于 2010-08-04T01:23:09.990 回答
2
一方面,如果您没有使用其中一种工具的经验,并且您有时间,那么也许这是一个为这个用例学习工具的好机会。我想如果你对这些工具有经验,你会简单地使用它们,就像许多人为许多解析任务获取正则表达式一样。
另一方面,简单的解析器并不难做到,甚至也不难维护。我喜欢写它们,当任务需要一个而不是工具时,我通常会联系它们(但我对这些工具不是很熟悉)。在许多情况下,我更喜欢简单的解析器而不是正则表达式,具体取决于任务。
于 2010-08-04T01:23:22.033 回答