2017-01-13 30 views
0

當我試圖用詞法分析器和解析器生成器弄溼我的時候,我意識到互聯網上的大多數資源(教程,論壇,StackOverflow)只談論語言。是因爲像Flex和Bison這樣的工具只適用於語言,還是因爲可以解析的任何東西都被認爲是一種語言?我應該使用解析器生成器來處理除了語言以外的其他任何東西嗎?

更具體地講,我有以下形式的文件:

File : Bananarama.xyz 
Date : 22.12.2017 

TableStart 
BlockStart 
Param1  : 12 
Param2  : 1.5 
Param3[lbs] : 1539 
Param4[cm] : 55 
BlockEnd 

BlockStart 
[...] 
BlockEnd 
TableEnd 

是該文件適用於由LALR解析器解析?

回答

2

(書面)語言只不過是包含信息的結構化符號序列。這與你所擁有的沒有什麼不同。數據文件,配置設置文件都是包含信息的所有符號序列。爲了發現(或匹配)其中包含的信息,需要識別符號的排序和排序。

但是,有不同的方式來構造符號來表示信息。組織符號的一些方式比其他方式更容易識別。通過更容易我的意思是代碼少,時間少,算法簡單。有些更困難。

你真正要翻譯的是什麼,「這個符號示例安排是否需要一個這種複雜度的算法才能被識別?」

答案很簡單計算機科學。我只是使用Chomsky Hierarchy來評估解析(匹配)文件中符號序列所需的算法類型。

沒有進一步的詳細解釋,說語言是類型2或類型3就足夠了,並且當然可以由LALR解析器解析。剩下的唯一問題就是LALR解析器對於這種語言是否過於複雜。

我們可以使用這個任務的正則語法(以及正則表達式)嗎?你的文件結構的例子實際上不足以回答這個問題。你需要知道結構是否可以嵌套。 BLOCK是否包含BLOCK

如果沒有嵌套,正則表達式足夠強大,並且有很多工具可以完成這項工作(如egrep,perl,awk,sed,findstr)。

+0

那麼,一個塊不能包含另一個塊,但我簡化了一下這個例子。所有的塊被一個TableStart/TableEnd對包圍(我編輯了這個問題)。但是這並沒有改變什麼,是嗎? – exilit

+0

另一個問題:不要塊引入某種上下文敏感性,以便它成爲類型1的語言? – exilit

+0

@exilit如果一個塊中的符號改變了後面那些塊的語法,那就是語法隨着符號匹配而改變,這只是上下文敏感的。從你的例子看來並非如此。也許你把語法和數據的語義搞混了。 –

相關問題