규칙을 정의하는 null 문자가 있으므로 yy_scan_bytes()를 사용하려고합니다. 내 문제는 내 문자열이 하나 이상의 규칙과 일치 할 수 있다는 것입니다. 나는 모든 규칙을 일치시키고 싶다. 한 번에 한 문자 씩 yylex() 함수를 제공하고 일치하는 항목이 있는지 확인하려고합니다. 테스트를 위해 다음 코드를 시도했지만이 코드는 작동하지 않습니다.다중 버퍼가있는 lex flex 스캐너
for(int i=0;i<length;i++)
{
yy_scan_bytes(&temp[i],1);
index=TomsonTalkslex();
}
간단히 말해서 스캐너에서 일치하는 규칙의 색인 만 반환합니다. temp는 char 버퍼입니다. yy_switch_to_buffer (yy_scan_bytes (& temp [i], 1))를 사용하려고했습니다. 그러나이 didnt 한 일.
스캐너에 상태를 재설정하지 말고 같은 상태의 후속 버퍼 처리를 계속하도록 할 수 있습니까?
왜 스캔 바이트를 사용해야합니까? 기본적으로 yylex는 EOF까지 한 번에 한 문자 씩 읽으며 null 바이트는 잘 읽어야합니다. 또한 나중에이 버퍼를 사용할 때의 현재 버퍼 상태를 저장 하시겠습니까, 아니면 새 버퍼로 마지막 버퍼 상태를 사용하여 버퍼를 전환하는 동안 상태를 유지 하시겠습니까 *? –
런타임시 데이터 입력이 있으므로 스캔 바이트를 사용해야합니다. 또한 각 문자에 대해 yylex를 호출하고 싶습니다. 버퍼 상태를 저장하려고하는 이유는 상태 머신을 재설정하지 않기를 바랍니다. 내 마지막 버퍼 상태를 새 버퍼와 함께 사용하고 싶습니다. 예를 들어 나는 2 개의 규칙을 가지고 있는데, 하나는 ab와, 다른 하나는 marching cd이다. "abcd"를 입력하여 바이트를 스캔하면 cd라고 생각되는 하나의 일치 항목 만 반환합니다. 나는 ab가 처리 될 때 ab 규칙을 원하고, cd가 처리 될 때 cd를 원한다. 그리고 이것은 스캔 바이트를 통해서만 수행 될 수있다. – Saba