Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 什么时候可以使用解析器生成器?_C_Parsing_Antlr_Lex_Flex Lexer - Fatal编程技术网

C 什么时候可以使用解析器生成器?

C 什么时候可以使用解析器生成器?,c,parsing,antlr,lex,flex-lexer,C,Parsing,Antlr,Lex,Flex Lexer,我正在为我正在编写的web应用程序编写一个简单的文本模板语言(想想google的ctemplate)。完成后,它将只包含少量可能的操作,如“评估并执行”、“评估并打印”、“评估并转义html”、“注释”。我想从头开始手工编写整个解析器,但我开始研究诸如lex、flex和antlr之类的解析器生成器。这些似乎比我简单语法所需要的要多。所以问题是,在哪一点上使用解析器生成器是可行的?越早越好。如果您现在有一个简单的语法,那么使用解析器生成器就很容易了。当您想要添加变量、循环和条件时,它会更容易 等等

我正在为我正在编写的web应用程序编写一个简单的文本模板语言(想想google的ctemplate)。完成后,它将只包含少量可能的操作,如“评估并执行”、“评估并打印”、“评估并转义html”、“注释”。我想从头开始手工编写整个解析器,但我开始研究诸如lex、flex和antlr之类的解析器生成器。这些似乎比我简单语法所需要的要多。所以问题是,在哪一点上使用解析器生成器是可行的?

越早越好。如果您现在有一个简单的语法,那么使用解析器生成器就很容易了。当您想要添加变量、循环和条件时,它会更容易

等等-没有什么理由发明自己的语言,除非它是非常特定于领域的语言,如
eqn
TeX
或分子建模语言。您最好嵌入一种专门为此目的而设计的语言。是该领域的老卫士,是一个强有力的竞争者。Perl也被设计成一种嵌入式脚本语言,但我认为它是一种差劲的候选语言,因为它可能会在用户手中产生非常“只写”的代码

语言设计是很难的,把所有的细节都抽出来更难。使用Python和Tcl,您可以决定向用户公开多少核心语言,并在需要时打开封闭的部分


我写的第一个小语言(令人惊讶的是,它仍然在生产中使用)如果Tcl在那里使用的话会更好。

一方面,如果您没有使用这些工具的经验,并且您有时间,那么这可能是一个为这个用例学习一种工具的好机会。我可以想象,如果你对这些工具有经验,你会简单地使用它们,就像许多抓取正则表达式来完成许多解析任务一样


另一方面,简单的解析器并不难做,它们甚至不难维护。我喜欢写它们,当任务需要一个工具而不是一个工具时,我通常会伸手去拿它们(但我对这些工具不是非常熟悉)。在许多情况下,我更喜欢一个简单的解析器而不是正则表达式,这取决于任务。

Ouch。Adobe耍了一个很好的诡计,想得到比他们(可能)支付的更多的钱“gnu flex”会是一个更好的标签吗?实用程序员的书有一个很好的第一章,讨论了不同语言的解析器的不同“优势”。Antlr是一个不错的选择,特别是因为AntlrWorks gui确实有助于调试语法和语法。