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