我知道詞法分析器和解析器的典型配置,其中詞法分析器讀取源代碼並生成令牌,然後將其導向解析器,解析器將它們用作語法生成中的終端符號。在一個典型的遞歸下降解析器中,你首先調用一些代表開始非終結符的頂級函數,然後這個函數調用其他的並通過詞法分析器中的標記讀取標記。將詞法分析器與許多解析器結合起來
但是如果我需要兩個不同的解析器在同一個詞法分析器的頂部?
我的意思是,他們都來自同一個地方讀書,因爲我不希望同樣的源多次讀取,也就是說,沒有多遍允許,以避免不必要的詞法分析器重複工作。我只是希望當剛剛生成下一個令牌時,兩個解析器都會同時使用它。
但我可以調用這些分析器一個只有一個頂級函數;不能同時調用兩者:/
是否有某種方式可以在某種類型的步模式下運行這些解析器? 也就是說,當我有一個新的令牌時,我想將它傳遞給這兩個解析器,但只是通過該令牌提前它們,儘可能地更新它們的內部狀態和數據結構,然後返回立即等待另一個令牌。
我從來沒有見過這樣的配置。這樣做有沒有可能建立一個解析器?是否有關於如何在代碼中構造這種解析器的一些材料?有沒有任何名字?
編輯1: 我不希望使用任何解析器生成工具,但寫的代碼我自己,因爲我想學習這種東西是如何工作的內部。
你必須談論一些特定的實現(例如Lex/Yacc);如果你正在實施你自己的,你可以簡單的設計它。那麼你在談論哪個實現? – 2011-02-22 20:53:46
不使用任何解析器生成器。寫我自己的。但是我不知道應該如何構造代碼以使其更好。 – SasQ 2011-02-22 22:10:55
這是什麼問題?讓你的詞法分析器返回一個懶惰列表,並且你的兩個分析器都會使用它。你可以根據需要堆疊儘可能多的解析器和變換器(並且詞法分析器應該與其他解析器不同)。 – 2011-02-22 22:42:52