Dot-Net
在 C# 中建構用於將文本文件轉換為資料結構的通用解析器
我有一個 SPAN 文件(http://www.cme-ch.com/span/spanl300.htm)的定義,我想用它來建構解析器以將字元串數據解析為記憶體中的集合類(甚至使用帶有 yield 關鍵字的惰性求值。)
我見過的所有解析技術和庫都適用於建構解析樹以實現語言;我只是想知道解析成資料結構的任何好的技術,類似於如何在 .net 框架中將 XML 解析成 XMLDocument,但使用 SPAN 定義的規則。
SPAN 似乎是一堆記錄類型,每條記錄都有很多細節。
就任何子記錄(作為非終結符)和代表 SPAN 定義的各種數據類型的終結數據類型而言,定義一個涵蓋所有記錄(作為非終結符)的經典語法應該很簡單。可能有很多非終結符,但這只是一個大語法,而不是一個複雜的語法。
大多數程式語言都有一小組終端令牌,通常可以出現在任何地方。事實是,語法定義了對接下來可能出現的內容的期望(在 LR 解析器文獻中稱為“第一”和“跟隨”集),包括非常有限的終端集。SPAN 語法不會有所不同;解析器的每個“解析狀態”都意味著接下來會出現一組有限的終端,並且組織一個解析器來利用這一點。(我已經建構了 L(AL)R 解析器,可以很容易地使用“目前”狀態來確定接下來可能發生的終端子集)。因此,SPAN 解析器可以只確定每個狀態下接下來可能出現的一小部分標記,並使用它來挑選包含這些下一個標記的字元(它們必須形成不相交的集合!)。
實現這一點的一種簡單方法是使用遞歸下降解析器。
所以我聲稱所有解析機器都可以很好地解析 SPAN,並可能需要一些定制工作來獲取令牌。
傳統解析器的解析操作會建構樹,但填充資料結構的欄位同樣容易。