left-recursion

    4熱度

    1回答

    我是新來的語法和antlr。我寫了一個語法,但得到一個左遞歸錯誤。誰能幫我這個 ? grammar Lang; options { output = AST; language = C; ASTLabelType= pANTLR3_BASE_TREE; backtrack = true; } start : primary_expression+

    10熱度

    2回答

    我見過this algorithm應該可以使用它來刪除所有左遞歸。 然而,我正在與這個特定的語法問題: A -> Cd B -> Ce C -> A | B | f 無論我嘗試我在循環或語法仍然是間接的左遞歸的結束。 在此語法上正確實施this algorithm的步驟是什麼?

    0熱度

    1回答

    下面是一個ANTLR語法的片段,它工作正常。 它旨在成爲一個tex分析器。 如果我取消註釋| text修改規則everywhere,ANTLR報告在規則escSeq 我認爲這是一個有趣的左遞歸。 我找不到左遞歸:無論我是盲人還是誤解了遞歸是什麼。 有什麼建議嗎? afterNewline : (everywhere | par); par : EoL {System.out.println("

    2熱度

    2回答

    我想實現一個採用{a,b,c,d} *形式的字符串集合的dcg。我遇到的問題是如果我有一個查詢形式s([ a,c,b],[]),它返回true,這是正確的答案,但是當我有形式s([a,c,f],[])的查詢時,它不返回一個答案,它用完本地堆棧。 s --> []. s --> s,num. num --> [a]. num--> [b]. num--> [c]. num--> [d].

    0熱度

    1回答

    我想解析cpp源語法的一個子集。後續ANTLR4語法規則是直接從C++語言規範複製(除hypens替換爲下劃線): abstract_declarator: ptr_operator abstract_declarator? | direct_abstract_declarator ; direct_abstract_declarator: direct_abst

    13熱度

    3回答

    在dragon book,LL語法定義如下: 一個語法是LL當且僅當對於任何生產A -> a|b,以下兩個條件適用。 FIRST(a)和FIRST(b)不相交。這意味着,他們不能同時得到EMPTY 如果b可以得到EMPTY,然後a不能推導出與FOLLOW(A)開始,這是FIRST(a)和FOLLOW(A)必須是不相交的任意字符串。 而且我知道LL語法不能被遞歸,但是形式上的原因是什麼?我猜左遞歸語

    2熱度

    1回答

    標準方法可用於將不是LL(1)的上下文無關語法轉換爲等價的語法。有沒有可以使這個過程自動化的工具? 在以下示例中,我使用大寫字母表示非終端,小寫字母表示終端。 下左遞歸的非終端: A -> A a | b 可以轉化爲右遞歸形式: A -> b A' A' -> NIL | a A' 不過,請注意左遞歸的產生式規則確保表達式聯想到左邊,和右邊的遞歸製作類似;所以語法修改也會改變表達的關聯性

    2熱度

    1回答

    我正在寫一個antlr語法,我希望能夠嵌套表達式,它可以是「簡單」表達式或布爾表達式(帶有可選的圓括號)。一個簡單的表達僅僅是一個與LHS和RHS,如a = 5 我希望能夠支持這些類型的表達式: a = 5 a = 5 OR b = 10 a = 5 OR (b = 10 AND c = 12) (a = 5 AND b = 10) OR (c = 12 AND D = 13) 我的語法

    4熱度

    1回答

    下面的文法有左遞歸: T -> Tx | TYx | YX | x X -> xx Y -> Yy | Yx | y 你如何去消除左遞歸。我閱讀了維基百科的解釋,但我對CFG相當陌生,所以沒有多大意義。任何幫助表示讚賞?一個簡單的英文解釋會更受讚賞。

    -2熱度

    1回答

    我有以下的生產 A -> Aa A -> b 所以很顯然,有左遞歸像 parseA() { parseA();//recursion parsea(); } 據說左遞歸可以使用可以避免以下規則: A -> bA' A' -> aA'|null 這裏如何避免左遞歸?仍然存在遞歸在函數A'中。 有人可以解釋我這個。我是這個主題的初學者嗎?