Приостановка и возобновление разбора в 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() (надеюсь) продолжить анализ.

Любые указатели на то, что я могу делать не так?

0

Решение

Похоже, это была какая-то проблема с висящим указателем. Перемещение инициализации theString в другом месте, кажется, исправили проблему. В общем, я все еще сосу на C.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]