我看到一些项目需要BISON来生成C++代码。让BISON/Yacc等人生成C/C++代码而不是自己编写C/C++代码有什么好处?
发布于 2010-10-13 14:04:22
BISON和YACC最重要的一点是,它们生成一个能准确解析语法的状态机。这是因为速度原因,因为生成的代码的复杂性不是O(n),与大多数第一次尝试实现中的规则数不一样。
状态机方法导致生成的状态数非常高,因此编写代码非常容易出错。如果有人建议我那样做的话,执行这段代码也是个地狱(如果有人建议我辞职)。
Bison和Yacc使您专注于语法,而不是它的实现。
发布于 2010-10-13 13:30:51
这与您不编写自己的hashmap、智能指针或线程库的原因相同。它更好地利用你的时间,使用已经编写和调试的东西,自己去做。总有某些人和某些情况下,最好的选择是自己的,但这些是罕见的。可能比大多数人所接受的更罕见。
特别是对于解析器来说,编写大部分时间工作的解析器是相当容易的。要编写一个对所有输入(包括格式错误的输入)都正确工作的输入,并且很容易修改,这是很棘手的。它还诱人地将一些奇怪的语法强加在输入上,使其东边解析,而牺牲了创建输入文件的难度。
对于C++,我在助推::精神方面取得了很好的效果。它是一个解析器框架,通过使用大量模板魔术,您可以将BNF直接嵌入到C++代码中。它有一点学习曲线,但是一旦你把注意力集中在它上,就可以很容易地为复杂的语言构建解析器。
发布于 2010-10-13 13:05:31
原因有二:
清晰性:解析器生成器可以使用一种针对问题的语言(例如ABNF),即描述语法。(有些语言可以说不需要一种单独的语言就可以了:只需在宿主语言中构建一个DSL即可。)
易用性:您不必知道如何自己编写解析器。您会使用递归下降解析器吗?包鼠解析器?等等,如果你只想解析SIP消息,你会在意吗?
https://softwareengineering.stackexchange.com/questions/11669
复制相似问题