我對這本教科書很難接受,而且我的教授認爲回答問題對已經知道進入課堂的材料的學生是不公平的(從這個人獲得的反饋是一個數據挖掘過程本身)。無論如何,我的問題圍繞着CFG(正式語言/函數式編程類)的派生。 Given a context free grammar that looks like:
S-> a|B
B-> b|C
C-> c
找到最左邊的推導。是簡單的嗎?因爲S-> a是S->
以下語法生成句子a, a,a, b,b, b,...,h, b。不幸的是,它不是LR(1),所以不能用於諸如「yacc」之類的工具。 S -> a comma a.
S -> C comma b.
C -> a | b | c | d | e | f | g | h.
是否有可能改變這個語法爲LR(1)(或甚至LALR(1),LL(k)或LL(1)),而不需要擴大非終結C,因此顯著增加製作
我打算用野牛解析一些腳本語言移減少衝突,在這種語言,我可以寫類似下面的代碼: 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)嗎?