首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用flex/yacc编写一个C++编译器需要多长时间?

使用flex/yacc编写一个C++编译器需要多长时间?
EN

Stack Overflow用户
提问于 2009-12-26 01:56:44
回答 8查看 6.1K关注 0票数 19

使用lex/yacc编写一个C++编译器需要多长时间?

我可以从哪里开始呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-12-26 02:18:58

有许多解析规则是bison/yacc解析器无法解析的(例如,在某些情况下区分声明和函数调用)。此外,有时解释令牌需要解析器的输入,特别是在C++0x中。例如,字符序列>>的处理严重依赖于解析上下文。

这两个工具对于解析C++来说是非常糟糕的选择,为了正确解析C++,您必须放入许多特殊情况,以避开这些工具所依赖的基本框架。这会花费你很长的时间,而且即使这样,你的解析器也可能会有奇怪的bug。

yacc和bison是LALR(1)解析器生成器,它们还不够复杂,不能有效地处理C++。正如其他人所指出的,大多数C++编译器现在都使用recursive descent解析器,而其他几个答案也指出了编写自己的解决方案的好方法。

C++模板不适合处理字符串,即使是常量字符串(虽然这在C++0x中可能已经修复,我没有仔细研究过),但是如果它们是这样的话,您可以很容易地用C++模板语言编写递归下降解析器。我觉得这很有趣。

票数 23
EN

Stack Overflow用户

发布于 2009-12-26 02:24:10

很长一段时间,lex和yacc都帮不上忙

如果您具备为如此大型的语言编写编译器的技能,那么您将不需要lex和yacc提供的少量帮助。事实上,虽然lex是可以的,但使用yacc可能需要更长的时间,因为对于C或C++来说,它的功能还不够强大,而且您可能会花费比仅仅编写递归下降解析器更多的时间来让它正常工作。

我认为lex和yacc最适合用于简单的语法,或者是值得花额外的精力拥有一个可读性很好的语法文件的时候,可能是因为语法是实验性的,可能会发生变化。

就此而言,整个解析器可能不是您工作的主要部分,这取决于您对代码生成器的确切目标。

票数 6
EN

Stack Overflow用户

发布于 2009-12-26 02:05:13

首先,SO上的"flex“标签是关于Adobe的产品,而不是lexer生成器。其次,Bjarne Stroustrup表示,他希望自己使用递归下降而不是表驱动工具来实现Cfront (第一个C++编译器)。第三,直接回答你的问题--很多。如果你觉得你需要写一个,看看ANTLR --不是我最喜欢的工具,但是已经有C++解析器了。

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

https://stackoverflow.com/questions/1961604

复制
相关文章

相似问题

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