gpt4 book ai didi

c++ - 是否可以在一个 Ragel 文件中调用多台机器?

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:46 25 4
gpt4 key购买 nike

我正在创建一个相当简单的解析器,它没有递归结构或任何太具有挑战性的东西。

我想做的是,当我遇到一个“命令”时,我想调用一个单独的解析函数(以宿主语言),例如 parseCommandType1,然后根据命令有一个单独的返回类型等.然后该函数将调用它自己的 Ragel 机器来解析命令的内容。

如果我想在一个 Ragel 解析器中完成所有这些操作,逻辑很快就会变得非常丑陋,因为我需要根据命令类型以不同方式解释数据并创建一些不同类型的派生对象。

“submachines”也很简单,而且会有很多,所以我绝对不想将它们拆分成单独的文件。我正在尝试清理的当前实现有大约 200-300 行,因此将其拆分为十个文件似乎有点不方便。

所以问题是我能否以某种方式在一个文件中调用/创建/实例化多台 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;

}

关于c++ - 是否可以在一个 Ragel 文件中调用多台机器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32265063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com