我正在为我正在编写的Web应用程序编写一个简单的文本模板语言(想想google的ctemplate)。完成后,它将只包含少量可能的操作,简单的事情,如“评估和执行”,“评估和打印”,“评估和逃避HTML”,“评论”。我正在考虑从头开始编写整个解析器,但我开始查看解析器生成器,如lex,flex和antlr。对于我的简单语法,这些似乎比我需要的更多。所以问题是,在什么时候使用解析器生成器是切实可行的?
答案 0 :(得分:6)
早点而不是晚点。如果你现在有一个简单的语法,使用解析器生成器很容易。当你想要添加变量,循环和条件时,它会更容易。
但等等! - 没有理由发明自己的语言,除非它是特定于域名的eqn
或TeX
或分子建模语言。嵌入专门为此目的设计的语言会好得多。 Tcl是该领域的守护者,Python是强有力的竞争者。 Perl也被设计成一种嵌入式脚本语言,但我认为它是一个糟糕的候选者,因为它可能会在用户手中产生非常“只写”的代码。
语言设计很难,吸烟所有繁琐的事情仍然比较困难。使用Python和Tcl,您可以决定向用户公开多少核心语言,并在您需要时打开关闭位。
我写的第一个小语言(令人惊讶地仍然在生产中使用)如果Tcl在那里使用的话会好得多。
答案 1 :(得分:2)
一方面,如果您没有使用其中一种工具的经验,并且您有时间,那么也许这是一个很好的机会来学习这个用例。我想如果你对这些工具很有经验,你就可以简单地使用它们,就像许多人在许多解析任务中使用正则表达式一样。
另一方面,简单的解析器并不难做到,它们甚至难以维护。我喜欢写它们,当任务需要一个而不是一个工具时,我通常会为它们伸出援手(但我对这些工具并不是很熟悉)。在许多情况下,我更喜欢简单的解析器而不是正则表达式,具体取决于任务。