ll

    0熱度

    1回答

    考慮爲命題邏輯以下語法: <A> ::= <B> <-> <A> | <B> <B> ::= <C> -> <B> | <C> <C> ::= <D> \/ <C> | <D> <D> ::= <E> /\ <D> | <E> <E> ::= <F> | -<F> <F> ::= <G> | <H> <G> ::= (<A>) <H> ::= p | q | r | ... | z

    2熱度

    1回答

    我有這個語法,我已經計算了第一個集合,但我不確定如何顯示我的工作方式,因爲顯示給我的方法我覺得太混亂了,但我理解如何獲取集合而不是如何顯示我的工作。 語法如下: S -> a a E | a E | S b , D -> E D d | c c | EPSILON , Y -> D E D | d , E -> a E D | EPSILON , 我的第一組是: first(S) = {

    13熱度

    3回答

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

    0熱度

    1回答

    所以我有一個家庭作業,我已經花了2個小時試圖找出爲什麼這個語法將不與LL解析器工作: <A> → a <B> <A> → a b <C> <B> → b d <D> <C> → d <E> <D> → m n <E> → x y 可能有人請點我在正確的方向?我知道一個LL可能被絆倒的方式之一是,如果它遇到一個無限循環,我不相信它在這裏。 感謝

    1熱度

    1回答

    語法是這樣的: 的S - >電子(ε) 的S - > TS 筆 - >(S) 我認爲這是確實LL(1),我的理由是,對於語法爲LL(1),對於每個具有多於1個生產規則的非終結符,規則的導演符號集必須是不相交的,因此在這種情況下:因此在這種情況下: DS(S-> e)= 優先(S-> E)U請按照(S-> E)= {)} 而且, DS(S-> TS)=第一(S- > TS)= {(} 而且,由於{)

    4熱度

    2回答

    我目前正在手動構建解析器。它是一個LL(1)解析器。目前,它是一個了不起的識別器:它的函數解析(List令牌)決定了令牌是否是該語言的成員。 現在,我想爲該輸入構建相應的AST。但是,我知道如何以遞歸下降的方式實現它(已經做到了)。也就是說,面臨的挑戰,我使用堆棧與經典算法實現我的籌碼: next <- first token of the input stack <- START_SYMBOL

    3熱度

    1回答

    據我所知,FOLLOW-Set在第一時間可以告訴我輸入流中是否有錯誤。是對的嗎? 因爲否則我想知道你究竟需要什麼。考慮你的解析器對堆棧的頂部的非終端(在我們班,我們使用了棧抽象爲LL-解析器) 即 [TOP] X...[BOTTOM] 的X - 讓它成爲非 - 終端 - 在下一步將被替換,因爲它位於堆棧的頂部。因此解析器詢問分析表使用什麼推導X.考慮輸入 + b 凡+和b都是終端。 假設X

    1熱度

    1回答

    如果通過查看它可以給我一個CFG,我可以決定它是LL類型的語法還是LR類型的語法?當我在Google上搜索這個問題時,我得到的是這些語法的解析器是如何工作的,但那不是我想要的。任何援助將不勝感激。

    0熱度

    1回答

    我正在用ANTLR構建一個類似英語的域特定語言。其關鍵字是上下文相關的。 (我知道這聽起來很骯髒,但對於非程序員目標用戶來說它很有意義)。例如,當通常的邏輯運算符(如or和not)被括在括號中時,將被視爲標識符,[像這樣和這個]。我目前的做法是這樣的: bracketedStatement : '[' bracketedWord+ ']' ; bracketedWord

    1熱度

    2回答

    我已導出的以下語法: S -> a | aT T -> b | bR R -> cb | cbR 我明白,爲了使一個語法是LL(1)它必須是無歧義的,右遞歸的。問題是我沒有完全理解左遞歸和右遞歸語法的概念。我不知道下面的語法是否是正確的遞歸。如果我的語法是LL(1),我會非常欣賞對左遞歸和右遞歸語法概念的簡單解釋。 非常感謝。