[英]Why right-recursive grammar is not appropriate for Bottom-Up LR(k) parsing?
我知道自下而上的解析從葉子開始並建立到根節點,而自上而下的解析從根開始並使其向下,對這些問題進行了一些研究並獲得了如何修改但無法得到的結果。為什么這不起作用的直接答案。 任何幫助表示贊賞。
[OP將問題標題從“為什么不能使用 ...”更改為“為什么不合適...”,這反過來又將我的評論更改為答案,因此我將其發布為一個。
您可以將左或右遞歸規則與任何LR(k)解析算法一起使用。
如果要構建樹,則正確的遞歸規則會引起解析過程的一個有趣的屬性:您必須保持與正確的遞歸一樣深的堆棧來跟蹤收集的節點。
人們會給您源文件列表中包含一百萬個項目,因此您的堆棧必須那么深。 使用正確的遞歸規則,此深度可能足夠深,如果堆棧大小固定,則空間不足。
通常使用處理器的自然下推堆棧來實現解析器堆棧。 我們的通用操作系統(Windows,Linux)及其通用編譯器恰好為您提供了這種固定大小的下推堆棧,因此從某種意義上講,它們加劇了這個問題。
使用左遞歸規則,您可以在每個列表項之后進行遞減,因此堆棧實質上可以是單位深度。 友好得多:不會崩潰,並且可以很好地使用緩存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.