使用Ragel解析C ++代码库中的字符串的原因是什么?

时间:2017-09-29 10:23:59

标签: c++ ragel

我继承了一个使用Ragel进行字符串解析的C ++项目。

这是我第一次看到这样做,我想了解为什么有人会使用Ragel而不是C ++来解析字符串?

1 个答案:

答案 0 :(得分:4)

parser generators(不恰当地称为“编译器编译器”)使用起来非常漂亮,并且可以生成可靠而有效的C ++或C代码(特别是因为parsing理论很好理解)。

通常,使用源代码生成器可能是明智之举。有时,特别是在大型项目中,编写自己的项目是明智的(阅读metaprogramming,特别是SICP甚至J.Pitrat's blog。好的build automation工具(如GNU makeninja)可以轻松配置为运行C或C ++代码生成器,并在构建时使用它们。

阅读Ragel简介。另请参阅flexbisonANTLRrpcgenQt mocswiggperf作为C的常见示例或C ++生成器。

在某些程序中,您甚至可以使用某些JIT compilation库(例如libgccjitLLVM)在运行时动态生成代码并使用它。在POSIX系统上,您还可以在运行时生成临时C或C ++文件,将其编译为plugin,并使用dlopen&加载该临时插件。 dlsym。有一个关于编译器和口译员的良好文化(例如通过Dragon Book)是值得的。

在您的应用程序中嵌入一些解​​释器(如luaguile)也是一种有趣的方法。但这是一个强有力的架构决策。

在许多情况下,生成源代码比手写代码更容易。当然,这并非总是可行。

PS。在阅读你的问题之前,我从未听说过Ragel!