Parsing 为什么静态解析器生成器比动态解析器生成器更流行?
解析器是一种获取输入字符串并输出AST的东西 解析器生成器是一种获取语法并输出解析器的东西 静态解析器生成器是一种获取语法并为解析器输出代码的工具 动态解析器生成器是在运行时获取语法并在运行时输出解析器的东西Parsing 为什么静态解析器生成器比动态解析器生成器更流行?,parsing,dynamic,static,runtime,parser-generator,Parsing,Dynamic,Static,Runtime,Parser Generator,解析器是一种获取输入字符串并输出AST的东西 解析器生成器是一种获取语法并输出解析器的东西 静态解析器生成器是一种获取语法并为解析器输出代码的工具 动态解析器生成器是在运行时获取语法并在运行时输出解析器的东西 这让我大吃一惊,因为元编程通常比运行时更难。我理解为什么它更有效,我理解为什么它不那么错误;我不明白的是它是如何成为常态的 进入解析器的世界是令人沮丧的。我不明白为什么每个人都指向亚克或野牛。我只是想让我的程序接受一个任意的EBNF,一个任意的输入字符串;然后吐出AST 每种语言都有一个
这让我大吃一惊,因为元编程通常比运行时更难。我理解为什么它更有效,我理解为什么它不那么错误;我不明白的是它是如何成为常态的 进入解析器的世界是令人沮丧的。我不明白为什么每个人都指向亚克或野牛。我只是想让我的程序接受一个任意的EBNF,一个任意的输入字符串;然后吐出AST 每种语言都有一个定义良好的EBNF,在某些地方可以使用标准的“语法文件”格式。我可以编写一个编辑器来支持任何语言 “好的,没有发生。解析器组合器到底是什么?它们看起来很酷,但要将EBNF转换成一个,没有简单的方法。” “好吧……我有EBNF,我到底怎么解析我的文本?什么?!生成一个完整的解析器?!”
我一直在想这个。以下是我的想法:
- 电脑速度很慢。编译器是必要的。当时,编写生成解析器的东西似乎比手工编写更明智
- 解析器很难推理,以至于编写一个动态生成的解析器实际上比静态生成的解析器更难
- 一些人认为静态解析器生成器是他们的发展方向,他们编写了一个成功的实现,由于流行使用,它现在已成为规范
如果你制定了正确的规则,你可以让他们这样做;我使用的解析器生成器会自动做到这一点(请参见bio),这是大语法的一大胜利]。在我的场景中,分出子任务是不可能的(在iOS上解析代码);但是谢谢你这么详细的回答!这里说iOS是OSX的衍生产品。确定不能运行子任务吗?苹果限制使用
fork()
。确定不能运行子任务吗?我不能相信fork是如此受限,以至于它不能派生一个纯粹的计算子任务。如果是的话,我真不敢相信IOS有多死气沉沉。因此,您的限制不是解析技术,而是您坚持使用的操作系统。你可以通过将YACC的源代码或任何东西导入到你的应用程序中来解决这个问题,这样你就可以将它作为子例程而不是子进程来调用,但这似乎是一个相当高的代价。哦,相信我,我和你一样感到沮丧。这个脑残的操作系统毕竟是这个问题背后的原因。