我正在创建一个相当简单的解析器,它没有递归结构或任何太具有挑战性的东西。
我想做的是当我遇到“命令”时,我想调用一个单独的解析函数(用宿主语言),例如 parseCommandType1 ,然后根据命令有一个单独的返回类型等。然后该函数将调用它自己的 Ragel 机器来解析命令的内容。
如果我想在一个 Ragel 解析器中完成所有这些,那么逻辑很快就会变得非常难看,因为根据命令类型,我需要以不同的方式解释数据并创建一些不同类型的派生对象。
“子机”也非常简单,其中会有很多,所以我绝对不想将它们拆分为单独的文件。我正在尝试清理的当前实现有 200-300 行,因此将其拆分为十个文件似乎有点不方便。
所以问题是我可以在一个文件中以某种方式调用/创建/实例化多个 Ragel 机器吗?这些机器可以有一个名称,但似乎无法调用该名称,只需将其包含在不同的机器上,所以对我来说,看起来每个文件只能有一台机器?
有没有其他巧妙的方法来做到这一点?