我正在使用Ragel来解析C++中的字符串。我需要能够无限期地暂停解析,然后从中断的地方继续解析。
现在,我正在尝试通过将fbreak放在结束操作的末尾来实现这一点。这似乎工作得很好,将控制权交还给了父程序。但是,我不确定如何恢复解析。我认为仅仅调用%write exec生成的代码就足够了,但事实似乎并非如此。当它返回到解析时,对原始字符串的引用似乎是错误的/丢失的。
我不确定我在C++中做错了什么(这不是我的母语),或者我对Ragel采取了错误的方法。
下面是我的开始和简历代码:
const char *p;
const char *pe;
void start()
{
int len = theString.length();
char chars[len+1];
theString.toCharArray(chars, len+1);
p = chars;
pe = chars + len;
resume();
}
void resume() {
%% write exec;
}第一次调用start()时,我的状态机最终输出了fbreak,然后我调用resume() (希望)继续解析。
我可能做错了什么,有什么建议吗?
发布于 2012-12-13 08:51:31
看起来像是某种悬空指针的问题。将theString的初始化转移到其他地方似乎已经解决了这个问题。所以基本上,我的C还是很烂。
https://stackoverflow.com/questions/13850080
复制相似问题