首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么使用解析器生成器?

为什么使用解析器生成器?
EN

Software Engineering用户
提问于 2010-10-13 12:14:58
回答 4查看 1.4K关注 0票数 6

我看到一些项目需要BISON来生成C++代码。让BISON/Yacc等人生成C/C++代码而不是自己编写C/C++代码有什么好处?

EN

回答 4

Software Engineering用户

回答已采纳

发布于 2010-10-13 14:04:22

BISON和YACC最重要的一点是,它们生成一个能准确解析语法的状态机。这是因为速度原因,因为生成的代码的复杂性不是O(n),与大多数第一次尝试实现中的规则数不一样。

状态机方法导致生成的状态数非常高,因此编写代码非常容易出错。如果有人建议我那样做的话,执行这段代码也是个地狱(如果有人建议我辞职)。

Bison和Yacc使您专注于语法,而不是它的实现。

票数 13
EN

Software Engineering用户

发布于 2010-10-13 13:30:51

这与您不编写自己的hashmap、智能指针或线程库的原因相同。它更好地利用你的时间,使用已经编写和调试的东西,自己去做。总有某些人和某些情况下,最好的选择是自己的,但这些是罕见的。可能比大多数人所接受的更罕见。

特别是对于解析器来说,编写大部分时间工作的解析器是相当容易的。要编写一个对所有输入(包括格式错误的输入)都正确工作的输入,并且很容易修改,这是很棘手的。它还诱人地将一些奇怪的语法强加在输入上,使其东边解析,而牺牲了创建输入文件的难度。

对于C++,我在助推::精神方面取得了很好的效果。它是一个解析器框架,通过使用大量模板魔术,您可以将BNF直接嵌入到C++代码中。它有一点学习曲线,但是一旦你把注意力集中在它上,就可以很容易地为复杂的语言构建解析器。

票数 5
EN

Software Engineering用户

发布于 2010-10-13 13:05:31

原因有二:

清晰性:解析器生成器可以使用一种针对问题的语言(例如ABNF),即描述语法。(有些语言可以说不需要一种单独的语言就可以了:只需在宿主语言中构建一个DSL即可。)

易用性:您不必知道如何自己编写解析器。您会使用递归下降解析器吗?包鼠解析器?等等,如果你只想解析SIP消息,你会在意吗?

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/11669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档