我正在尝试更多地了解编译器和编程语言,很遗憾我的大学没有提供有关编译器的课程,所以我必须自己做(感谢互联网)。
目前我试着了解并为我的语言实现词法分析器,我需要正则表达式。
我习惯于快速编写perl正则表达式脚本,我认为我可以在我的C ++词法分析器中嵌入Perl 。现在的问题是:
感谢您阅读此内容:)
答案 0 :(得分:8)
在项目中嵌入Perl只是为了做正则表达式就像试图将大象装入Miata以获得更多的行李箱空间。 (Badump!)
Boost是处理正则表达式的一种方法,或者如果您在支持POSIX.2的环境中编写,请查看regcomp()
,regexec()
和regfree()
函数。
在编写了自己的词法分析器之后,请研究一个名为lex
的工具,它几乎是开发词法分析器的黄金标准。它有一个名为YACC
的合作伙伴,用于开发解析器。两者都经过时间测试,并生成严密,无错误的代码。 (GNU-ish环境称这些程序为flex
和bison
。)
答案 1 :(得分:6)
没有理由你不能成为优秀程序员的一部分就是使用正确的工具来完成工作,而perl非常擅长文本处理。
但是,不要考虑将基于perl的词法分析器填充到C ++编译器中(用C ++编写,而不是编译C ++,我希望),你应该考虑用C ++编写perl模块,并编写编译器驱动程序在perl中,执行lexing,填入数据结构,然后调用C ++模块的函数来完成编译。
答案 2 :(得分:3)
如果你真正想要的只是Perl风格的正则表达式,请查看libpcre库。它经过了很好的测试,非常便携,而且根据我的经验很容易使用。推荐的软件。 (可能已经在你的机器上了。:)
答案 3 :(得分:1)
请参阅“正则表达式中有什么好处\ G?”的底部? perlfaq6的section。它描述了如何使用// gc来创建一个名为lexer的tokeniser。