2010-03-14 41 views

回答

13

最簡單的重入式解析器不使用全局變量,因此可以同時有多個活動實例(不一定與線程相關,但這是我懷疑的主要用例)。

但是,在更復雜的用例中,您可以使用解析器來解析相同源文檔中的多種語言。例如,考慮一個JSP解析器,它必須在同一個文件中解析Java代碼和HTML。與其製作一個涵蓋兩種語言的巨大解析器(可能非常不切實際),您可以製作兩個解析器並在它們之間切換。但是,如果您的解析器在它們之間使用全局狀態切換可能會有問題。重入式語法分析器允許您輕鬆地在語法分析器之間切換,無論是以協程的形式,還是簡單的「解析器 - 調用解析器-B用於嵌入式代碼然後返回」的情況。


編輯補充:

如果你想重入解析的極端形式,看看解析器組合(如秒差距)這裏的「語法」每個子表達式一個單獨的解析器完全。通過組合大量的小型分析器來構建一個大型的分析器。

3

From wiki

要折返,計算機程序或 例行:

  • 必須保持無靜電(或全球)非恆定的數據。
  • 不得將地址返回到靜態(或全局)非常數數據。
  • 只能在由調用者提供給它的數據上工作。
  • 不能依靠鎖定單身資源。

不一定與線程安全性有關,但解析文檔中的多個語法。