2013-03-13 35 views
0

我正在使用柔性掃描儀掃描一堆文件。我目前循環播放這些文件,並呼叫yylex(),但似乎Flex中的狀態不會被重置。設置一個函數調用<EOF>來重置任何變量,BEGIN INITIALyylex()的下一個調用之前應該做些什麼?在文件之間重置柔性掃描儀的正確方法

當測試這個時,好像這會讓我進入一個無限循環,因爲我最終返回INITIAL而文件中沒有更多的匹配,所以它永遠不會退出。

回答

1

有一個使用<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不復位啓動條件。

+0

我在發佈問題後看到了。我想在這裏我也應該重置我在掃描儀中用於特定緩衝區的任何'全局'變量,呵呵? – Derek 2013-03-13 20:16:53

+0

@Derek,如果你需要重置它們,你應該重置它們。我不認爲flex有什麼方法可以知道你的全局變量甚至存在,更不用說它們的值應該是什麼:) – rici 2013-03-13 20:20:21

+0

有點側面話題..但是人們使用flex的典型方式?設置一些根據狀態修改的全局變量?這通常是我一直在做的事情..但在文件結尾,我準備好重置所有這些變量,並從下一個文件 – Derek 2013-03-13 20:29:17