Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用Perl编写编译器的一部分(用c+;+;)_C++_Perl_Compiler Construction_Programming Languages_Lexer - Fatal编程技术网

C++ 用Perl编写编译器的一部分(用c+;+;)

C++ 用Perl编写编译器的一部分(用c+;+;),c++,perl,compiler-construction,programming-languages,lexer,C++,Perl,Compiler Construction,Programming Languages,Lexer,我正在努力学习更多关于编译器和编程语言的知识,不幸的是,我的大学没有提供关于编译器的课程,所以我不得不自己做(谢谢互联网) 目前,我正在努力理解和实现我的语言的词法,我需要正则表达式 我习惯于很快地编写Perl ReGEX,我认为我可以在我的C++词库中嵌入Perl。现在的问题是: 这会造成沉重的开销吗 我应该尝试与Boost(或者其他C++库GOR正则表达式)和平共处吗? 感谢您阅读本文:)在项目中嵌入Perl只是为了执行正则表达式,这就像试图将大象塞进Miata以获得更多主干空间。(巴杜

我正在努力学习更多关于编译器和编程语言的知识,不幸的是,我的大学没有提供关于编译器的课程,所以我不得不自己做(谢谢互联网)

目前,我正在努力理解和实现我的语言的词法,我需要正则表达式

我习惯于很快地编写Perl ReGEX,我认为我可以在我的C++词库中嵌入Perl。现在的问题是:

  • 这会造成沉重的开销吗
  • 我应该尝试与Boost(或者其他C++库GOR正则表达式)和平共处吗?<李>

感谢您阅读本文:)

在项目中嵌入Perl只是为了执行正则表达式,这就像试图将大象塞进Miata以获得更多主干空间。(巴杜普!)

Boost可能是处理正则表达式的一种方法,或者如果您在支持POSIX.2的环境中编写,请查看
regcomp()
regexec()
regfree()
函数


在编写了自己的词法分析器之后,研究一个名为
lex
的工具,它几乎是开发词法分析器的黄金标准。它有一个名为
YACC
的合作伙伴来开发解析器。两者都经过时间测试,生成紧凑、无bug的代码。(GNU ish环境称这些程序为
flex
bison

没有理由不能,作为一名优秀程序员的一部分是使用正确的工具来完成工作,而perl非常擅长文本处理


但是,不要把基于Perl的词法编辑器填充到C++编译器(C++编写,不编译C++,我希望),你应该考虑在C++中编写Perl模块,让编译器驱动程序在Perl中编写,进行词表,填充数据结构,然后调用C++模块的函数完成编译。

如果你真正想要的是Perl风格的正则表达式,请查阅库。它经过了很好的测试,非常便携,根据我的经验,很容易使用。推荐的软件。(可能已经在您的计算机上了。)

请参阅perlfaq6的“正则表达式中\G有什么好处?”的底部。它描述了如何使用//gc创建一个tokeniser aka lexer。

为什么不使用旧的好lex/yacc?(嗯,flex/bison)实际上我知道它们,但我想对编译器内部有一个“深入”的了解。。我也读过关于Quex的书,它看起来也不错:)我见过一个用Icon编写的lexer,它(像Perl)也有很好的字符串处理功能,对正则表达式之类的功能的需求远没有你想象的那么强烈。我建议你找一本大学通常用于编译器编写课程的书,比如《用C编写编译器》。我知道人们对编译器的工作原理有着非常深入的了解。目前我正在阅读《龙之书》(编译器等),我会尽快去拿一本你的书:)@fatmatto,如果你想深入了解,你一定要编写自己的正则表达式编译器。这个解决方案听起来很有趣,我还可以学习如何“组织”一个Perl模块。也许是个愚蠢的问题,但是为什么要说“不编译C++”。" ? 性能问题还是别的什么?@ FATMatto:编写一个能解析C++的编译器是相当困难的。此外,你确实不需要正则表达式来解释LX C++。很抱歉我误解了你的评论,谢谢你解释:D我想编译我自己定义的语言,而不是C++。无论如何,“FATMatto:”虽然MsAlter不是我,但是他确实解释了我的意思。“Ben Voigt抱歉打扰了,但是你能解释一下你到底是什么意思吗?”“编译器驱动程序”?它应该负责编译过程的哪一部分?我错过了libpcre,但我找到了libPerl++,这就是我发表这篇文章的原因。你的建议看起来更具体,因为我的问题,我将把这个libpcre添加到todo列表中;)PCRE不支持Perl正则表达式的许多可能性