ll

    0熱度

    4回答

    我需要手動編寫解析器。無法選擇LL(*)和LR(可能試試Earley?)。我是否應該使用自下而上的解析方式,因爲LL的語法會比較困難?

    1熱度

    2回答

    所以我一直在嘗試用Scala的解析器編寫一個計算器,除了發現運算符關聯性倒退以及當我嘗試使我的語法左遞歸時,它很有趣,即使它完全沒有歧義,我也會發生堆棧溢出。 爲了澄清,如果我有這樣的規則: DEF減去:解析器[INT] = NUM​​〜 「 - 」 〜添加{X => x._1._1 - x._2} 然後評估7 - 4 - 3出來是6而不是0. 我實際上已經實現這個的方式是我正在編寫一個二叉樹,其

    2熱度

    1回答

    這是一個衆所周知的事實,任何LL(1)語法也LR(1),但我似乎無法在任何地方找到這個嚴格的證明。我聽說過一些關於證明的高級概述(例如,由於LL(1)語法一次僅由一個令牌確定其產生,而LR(1)語法在決策之前可以有更多的輸入掃描被製造)。然而,在閱讀了關於編譯器的兩本教科書並解析並快速進行Google搜索之後,我似乎無法找到更正式的這一事實證明。 有誰知道這個證明,或者至少在哪裏可以找到它?

    164熱度

    2回答

    任何人都可以給我一個LL解析與LR解析的簡單例子嗎?

    12熱度

    1回答

    我有一個語法,我可以檢查是否是LL(1)。但是,有什麼方法可以檢查語法生成的語言是否爲LL(1)? LL(1)語法和LL(1)語言之間的區別究竟是什麼?

    3熱度

    1回答

    我只有一些haskell的技能,我需要幫助如何使用parsec實現預測分析(LL *)。 我有上下文無關文法: <a> ::= identifier | identifier '(' <args> ')' 基於http://research.microsoft.com/en-us/um/people/daan/download/parsec/parsec.pdf(章預測解析器),我寫了這個代碼

    2熱度

    1回答

    我有SABLECC這個(工作)LALR語法: Package org.univpm.grail.sable; Helpers digit = [ '0' .. '9' ]; letter = [ [ 'a' .. 'z' ] + [ 'A' .. 'Z' ] ]; any_character = [ 0 .. 0xfffff ] ; States n

    1熱度

    3回答

    我目前正在嘗試爲編程語言編寫一個(非常)小的解釋器/編譯器。我已經爲該語言設置了語法,現在我需要寫下該語言的語法。我打算使用LL(1)解析器,因爲經過一些研究後,它似乎是最容易使用的。 我是這個領域的新手,但是從我收集的內容來看,強烈推薦使用BNF或EBNF來形式化語法。但是,似乎並非所有語法都適合使用LL(1)解析器來實現。因此,我想知道以LL(1)形式編寫文法的正確(或推薦)方法是什麼。 謝謝

    0熱度

    1回答

    我想知道在函數式編程中構建非遞歸預測式表驅動的LL(1)語法分析器的最佳方式:手動編碼Haskell或OCaML還是存在一個工具,可以幫助我呢?

    6熱度

    1回答

    我一直在玩很多最近不是LL(1)的語法,其中很多可以轉換成LL(1)的語法。 但是,我從來沒有見過不是LL(1)的明確語言的示例。換句話說,語言的任何明確的語法不是LL(1)),我也不知道如果我意外地偶然發現了一個,我將如何去證明我找到了一個語言。 有誰知道如何證明一個特定的毫不含糊的語言不是LL(1)?