我有一個包含一個ABNF語法與標籤,如在這個簡化的例子文件:讀/解析ABNF語法在C標籤++
$name = Bertha {userID=013} | Bob {userID=429} | (Ben | Benjamin) {userID=265};
$greet = Hi | Hello | Greetings;
$S = $greet $name;
現在的任務是通過解析獲取用戶ID這個語法的一個給定的句子。例如,分析句子
Greetings Bob
應該給我們的用戶ID 429.語法必須在運行時讀取,因爲它們可以運行之間改變。
我現在的做法是:
解析語法到一個或多個樹,把標籤在它們屬於
葉子或節點解析句子本/那些樹構造一棵樹,創建給定的句子(我正在考慮使用Earley爲此)
使用此樹來獲取標籤(不同於示例中,會有多個不同的標籤如此ree)
我的問題是,是否有任何軟件組件可以使用或至少修改來解決此任務?特別是第1步和第2步似乎是非常通用的(1.將ABNF語法讀入C++內部表示(例如樹); 2.使用內部表示從1開始的早期算法(或類似的東西)對於第1步來說,完整的,防故障的ABNF分析器將是一項非常耗時的任務。
我知道VoiceXML語法是這樣工作的,但我無法找到它們的解析器。基本上所有我能找到的都是解析器生成器,它將爲單個語法生成C++代碼,這對我來說不實用,因爲語法在編譯時不知道。
任何想法?