我對這本教科書很難接受,而且我的教授認爲回答問題對已經知道進入課堂的材料的學生是不公平的(從這個人獲得的反饋是一個數據挖掘過程本身)。無論如何,我的問題圍繞着CFG(正式語言/函數式編程類)的派生。 Given a context free grammar that looks like:
S-> a|B
B-> b|C
C-> c
找到最左邊的推導。是簡單的嗎?因爲S-> a是S->
我打算用野牛解析一些腳本語言移減少衝突,在這種語言,我可以寫類似下面的代碼: a = input()
b = a + 1
function myfunc
a = input()
b = a + 1
end function
我發現,該塊 a = input()
b = a + 1
其中進出函數定義的同時出現可以通過相同的規則stmts被減小,所以我寫如下代碼 %
考慮下面的語法 S -> aPbSQ | a
Q -> tS | ε
P -> r
雖然構建DFA,我們可以看到有一個應當包含項目 Q -> .tS
Q -> . (epsilon as a blank string)
因爲t爲後續的狀態(Q)似乎有一個轉變 - 減少衝突。 我們可以總結語法的本質不是SLR(1)嗎?
我試圖使用檸檬分析器生成器生成分析器表,但運行lemon grammar.y時生成的.out文件僅包含自動機的狀態。 有沒有辦法讓非終端的goto表,不僅是自動機的狀態? 或者這隻能通過讀取生成的代碼來完成? 是否有其他工具可以生成動作和goto表? PS: 的.out文件(由檸檬產生)爲一個簡單的語法看起來像這樣: State 0:
start ::= * e
e :