0
Q
左遞歸語法識別
A
回答
2
有用於識別爲空的非端,它運行在時間的線性在語法的大小的標準算法(見下文)。完成之後,您可以在所有非終端A
,B
上構建關係A potentially-starts-with B
。 (事實上,這是比較正常的,構建在所有的語法符號這種關係,因爲它也用於構建FIRST
套,但在這種情況下,我們只需要投射到非終端)。
已經這樣做了,留下-recursive非終端都A
這樣A potentially-starts-with+ A
,其中potentially-starts-with+
是:
potentially-starts-with ∘ potentially-starts-with*
你可以使用任何傳遞閉包的算法來計算這種關係。
僅供參考,用於檢測可爲空的非終端。
- 刪除所有無用的符號。
- 附加一個指向每個生產的指針,最初位於第一個位置。
- 將所有作品放入作品中。
- 雖然可能,發現生產,其執行以下操作之一適用:
- 如果生產的左手側已被標記爲&的ε-; - 壬終端,丟棄生產。
- 如果指針右側的標記是終端,則放棄生產。
- 如果沒有立即令牌指針(即,指針是在端部)標註生產的左手側作爲與小量的權利; - 壬終端並且丟棄的生產。
- 如果令牌立即向指針的右側是已經標記爲&小量非末端; - 壬終端,前進指針一個令牌的權利和生產返回到工作隊列。
一旦它不再能夠從工作隊列,所有的ε-&選擇生產; - 壬終端已被識別。
只是爲了好玩,上述算法的一個微不足道的修改就可以用來做第1步我會離開它作爲一個練習(這也是在龍書的練習)。作爲練習還剩下的方法是確保上述算法在線性時間內執行。
相關問題
- 1. 解析左遞歸語法
- 2. 刪除左遞歸語法
- 3. 左遞歸ANTLR語法
- 4. XTEXT處理左遞歸語法
- 5. ANTLR4 - 相互左遞歸語法
- 6. 消除語法的左遞歸
- 7. 語法中的左遞歸衝突
- 8. ANTLR4 C#語法和左遞歸
- 9. JavaScript(ECMA)語法 - 左遞歸問題
- 10. 消除此PEG.js語法的左遞歸
- 11. 刪除左遞歸語法中的
- 12. 左分解非左遞歸語法使其成爲LL(1)
- 13. 左分解的自動語法轉換;和左遞歸移除
- 14. Antlr左遞歸
- 15. PEG遞歸語法
- 16. SAPI語法識別
- 17. 使用遞歸進行識別
- 18. 遞歸SQL查詢來識別
- 19. 遞歸識別排序列表
- 20. 創建遞歸識別聯合值
- 21. DCG和左遞歸
- 22. 左遞歸消除
- 23. 左分解因子和左遞歸之間的區別
- 24. 如何刪除以下語法中的左遞歸?
- 25. 用ANTLR編碼語法(相互左向遞歸)
- 26. 如何消除LL語法分析器的左遞歸
- 27. 左遞歸調用錯誤和語法翻譯
- 28. 我的語法中的間接左遞歸?
- 29. 如何消除以下語法中的左遞歸?
- 30. 上下文無關語法是否可以左右遞歸?