Cag에서 문자열을 파싱하려면 Ragel을 사용하고 있습니다. 내가 무한한 시간 동안 파싱을 일시 중지하고 나서 중단했던 곳에서 파싱을 재개 할 수 있어야한다.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()
전화를 처음으로, 내 상태 기 결국 fbreak
아웃 (S)를하고 난 (희망) 구문 분석을 계속 resume()
를 호출합니다.
내가 잘못하고있는 부분에 대한 설명이 있으십니까?