2012-12-12 53 views
0

我正在使用Ragel解析C++中的字符串。我需要能够暂停解析一些无限期的时间,然后继续解析我离开的地方。在Ragel中暂停和恢复解析

现在我正试图通过将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(),我的statemachine最终fbreak s出,然后我打电话给resume()(希望)继续解析。

任何指针,我可能做错了什么?

回答

0

看起来像是某种悬挂指针问题。在其他地方移动theString的初始化似乎解决了问题。所以基本上,我仍然吮吸C.