left-recursion

    2熱度

    4回答

    我想在序言中解決DCG語法,併成功達到一個點,我卡在評估​​涉及這些括號的表達式。 expr(T, [’(’, 5, +, 4, ’)’, *, 7], []), expr(Z) --> num(Z). expr(Z) --> num(X), [+], expr(Y), {Z is X+Y}. expr(Z) --> num(X), [-], expr(Y), {Z is X-Y}. exp

    0熱度

    1回答

    如何從語法中刪除此行中的左遞歸? A - > D | R | r B A n; | AA | epsilon r,n和;是終端符號。 D,R,B和A都是非終端。 在此先感謝

    3熱度

    1回答

    如何刪除以下規則的左遞歸: S - > aSAbb | aA 我明白如何在S - > SA | A 它變成S - > A |如'; S' - > A | AS',但終端在這個問題上拋棄了我。 編輯: 對不起,顯然我很困惑,什麼左遞歸的。我應該問如何從右側移除左手符號。

    3熱度

    2回答

    我們只有很少的vb6代碼片斷(只能使用功能的一個子集),它們可以被非程序員獲取。這些被稱爲規則。對於編寫這些代碼的人來說,他們很難調試,因此有人編寫了一種附加的分析器來評估子表達式,從而更好地展示問題所在。 這個addhoc解析器非常糟糕,並沒有真正的工作。所以我試圖寫一個真正的解析器(因爲即時通訊手寫(沒有解析器生成器,我可以理解與VB6後端)我想要遞歸正常的解析器)。我不得不逆向工程,因爲我可

    5熱度

    1回答

    我想創建一個允許curried函數調用的語法。 即: a() /// good a()() /// good a()()() /// good a(a) /// good a(a()()) /// good /// etc 我的第一個嘗試是這樣的: ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; fn

    0熱度

    1回答

    我正在修改明天的考試,並且會在前一年進行考試。 在測試中是語法。 Expression -> Foo "+" Bar "end" Foo -> [a-z0-9]+ | Expression Bar -> Expression Foo | a*b*c+ 我曾嘗試和花了幾個小時研究如何做到這一點,但不能弄明白。 我已經看過用epsilion替換東西,但沒有自信。 我認爲我需要創建一個Foo'和

    3熱度

    2回答

    試圖找出在上下文無關語法中刪除左遞歸。我習慣了某些形式,但這個讓我有點難以理解。 S --> S {S} S | (A) | a A --> {S} A | epsilon 我也必須設計一個體面的解析器,我可以做。然而,搞清楚這個左遞歸(尤其是第一個)讓我感到困惑。

    0熱度

    1回答

    如何改變這種文法是確定性 e --> []. e --> "*". e --> s_e. e --> e, s_e. s_e --> ("a",e);("b",e). 我只是不知道從哪裏把切割,以避免回溯。

    0熱度

    1回答

    這是製作。 A-> Aa| b|c; 現在我該怎麼 A->bA' A'-> aA' | e (empty transition) A->c 這將是正確的答案?那是'b'還是'c'可以使用?