0
我正在使用柔性掃描儀掃描一堆文件。我目前循環播放這些文件,並呼叫yylex()
,但似乎Flex中的狀態不會被重置。設置一個函數調用<EOF>
來重置任何變量,BEGIN INITIAL
在yylex()
的下一個調用之前應該做些什麼?在文件之間重置柔性掃描儀的正確方法
當測試這個時,好像這會讓我進入一個無限循環,因爲我最終返回INITIAL而文件中沒有更多的匹配,所以它永遠不會退出。
我正在使用柔性掃描儀掃描一堆文件。我目前循環播放這些文件,並呼叫yylex()
,但似乎Flex中的狀態不會被重置。設置一個函數調用<EOF>
來重置任何變量,BEGIN INITIAL
在yylex()
的下一個調用之前應該做些什麼?在文件之間重置柔性掃描儀的正確方法
當測試這個時,好像這會讓我進入一個無限循環,因爲我最終返回INITIAL而文件中沒有更多的匹配,所以它永遠不會退出。
有一個使用<EOF>
匹配來切換flex manual中的緩衝區的示例;它使用下面的代碼:
<<EOF>> {
if (--include_stack_ptr 0)
{
yyterminate();
}
else
{
yy_delete_buffer(YY_CURRENT_BUFFER);
yy_switch_to_buffer(
include_stack[include_stack_ptr]);
}
}
您希望添加BEGIN(INITIAL)
到else
分支,因爲yy_switch_to_buffer
不復位啓動條件。
我在發佈問題後看到了。我想在這裏我也應該重置我在掃描儀中用於特定緩衝區的任何'全局'變量,呵呵? – Derek 2013-03-13 20:16:53
@Derek,如果你需要重置它們,你應該重置它們。我不認爲flex有什麼方法可以知道你的全局變量甚至存在,更不用說它們的值應該是什麼:) – rici 2013-03-13 20:20:21
有點側面話題..但是人們使用flex的典型方式?設置一些根據狀態修改的全局變量?這通常是我一直在做的事情..但在文件結尾,我準備好重置所有這些變量,並從下一個文件 – Derek 2013-03-13 20:29:17