暂停并恢复 Ragel 中的解析
Pausing and resuming parsing in Ragel
我正在使用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()
(希望)继续解析。
关于我可能做错了什么的任何指示?
看起来这是某种悬空指针问题。将theString
的初始化移动到其他地方似乎已经解决了这个问题。所以基本上,我仍然对C很讨厌。
相关文章:
- 用C++将哈希表写入文件并从文件中恢复
- Opencv 恢复到比我设置的更高的分辨率
- 变量在使用赋值语句赋值后恢复为以前的值
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 删除所有字符串后如何恢复 QStringList?
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 如何仅使用一次固定<<设置精度(2)?或者至少恢复到默认行为?
- "co_yield"是否可以在恢复协程时从调用方返回值?
- OpenSSL C API:如何在程序exec()之后恢复TLS连接?
- 通过指针恢复对数组的引用.UB与否?
- 从不同进程中的另一个线程挂起/恢复线程或进程
- 如何在 XML 中正确存储原始字节数据并恢复它?
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 模板化类中运算符 + 重载的值的恢复
- C++ 线程创建/删除与线程停止/恢复
- ZMQ::send() 抛出异常并终止 QNX 进程.为什么以及如何从中恢复?
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- xSemaphoreTake 在调用 xSemaphoreGive 后不会恢复任务
- 将类型映射到整数值后,如何在给定整数值的情况下恢复类型?
- 暂停并恢复 Ragel 中的解析