是否有可能在一个Ragel文件中调用多台机器?
Is it possible to invocate multiple machines in one Ragel file?
我正在创建一个相当简单的解析器,它没有递归结构或任何太具有挑战性的内容。
我想做的是当我运行到一个"命令"时,我想调用一个单独的解析函数(在主机语言中),如parsecommantype1,然后根据命令有一个单独的返回类型等。然后,该函数将调用自己的Ragel机器来解析命令的内容。
如果我想在一个Ragel解析器中完成所有这些,逻辑很快就会变得非常难看,因为基于命令类型,我需要以不同的方式解释数据并创建一些不同类型的派生对象。
"子机器"也非常简单,而且会有相当多的子机器,所以我绝对不想将它们拆分为单独的文件。我目前正在尝试清理的实现有200-300行,所以把它分成10个文件似乎有点不方便。
所以问题是我可以在一个文件中调用/创建/实例化多个Ragel机器吗?机器可以有名字,但似乎没有办法叫这个名字,只是把它包含到不同的机器上,所以在我看来,每个文件只能有一台机器?
是否有其他整洁的方法来做到这一点?
这样的东西适合我。不可否认,如果你有很多函数定义,它会变得相当冗长。
%%{
machine Machine1;
main := ... ;
}%%
%% write data nofinal;
void machine1_func(char *p, size_t p_len) {
int cs;
char *pe = p + p_len;
%% write init;
%% write exec;
} //Only one blank line between next ragel machine definition or it doesn't seem to find the next definition.
%%{
machine Machine2;
main := ... ;
}%%
%% write data nofinal;
void machine2_func(char *p, size_t p_len) {
int cs;
char *pe = p + p_len;
%% write init;
%% write exec;
}
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 调用 C 文件中的"C++"结构
- 如何从二进制文件中的给定符号中获取调用程序图
- 编译多个C++文件.调用二进制文件以运行代码
- 不带预处理器的调用方法/文件的文件名/行号
- 调用在 HXX 文件中声明的静态数据成员
- 如何从Windows控制台调用.exe(C++)以在不同的目录(或任何目录)中创建文件夹?
- 为什么我无法打开/读取从 Python 调用的 C 扩展名中的 txt 文件?
- 从 Python 调用 c++ 文件
- 使用ifstream时,被调用文件中的数据不会打印
- 使用 extern "C"调用 C 文件中的C++类函数
- 刷新不调用文件更改
- 打开()系统调用文件描述符
- C++ / GCC - 未调用文件范围对象的构造函数
- 从多个线程调用C文件中的函数
- 从Java文件调用c++文件中的c++方法时出现UnsatisfiedLinkError