我寫一個解析器的語言,而掃描儀的設計把節點到解析樹這不應該是有
- 要麼也返回不需要的終端(例如whitespacing)OR
- 不這樣做
基於布爾標誌。
現在,在解析器中,我不想讓語法與所有終端混在一起,它們應該被我正在構建的解析樹以某種方式「自動地」吞下。爲了做到這一點「魔術」,我想我會鏈接終端(簡單地連接循環列表),所以我可以迭代它們並在發生縮減時「填空」(我正在使用LALR(1 )解析器生成器)。
這聽起來像一個理智的想法,雖然有一個問題。記得我說過「要麼退還要麼沒有」?在情景(2)中,我會釋放終端,因爲誰知道接下來會發生什麼?我不想要任何內存泄漏。
但是在場景(1)中,我不能釋放終端,因爲根據他們我會決定進一步減少「填空」過程應該停止的地方。
由於相同的原因,我無法有條件地釋放它,我不知道接下來會發生什麼。如果沒有任何「填充空白」過程觸發?如果根本沒有進一步減少會怎樣?
你有類似的問題嗎?你是如何解決它的?
注意:這一切都在我的腦海裏,我可能沒有足夠清楚地解釋它,請問,我會編輯我的問題。這個場景實際上有點複雜,我不是從頭開始寫的,我可以利用我的想象力,我將它融入其他東西,所以很可能我會回答「我做不到這一點由於環境的限制「。
附錄
的只是在我腦海中真正的好想法是叉子和提高解析器生成,我已經在這裏和那裏的一些細微的地方已經完成,克服一些那些我上面提到的限制。
我知道我想要什麼,我想要樹中的空格。真。這正是我想要的不是人們想要的平常事物。我有很好的理由在樹上添加這些令牌。真的很好的理由。沒有這些原因,我不會首先做到這一點。不過謝謝你提醒我。 – Flavius
是的,它清楚你知道你想要什麼。如果你沒有解釋他們,說你有很好的理由,或者特別告訴我們你希望達到的最終效果,會讓你「傳統的回答說......」。 ...如果你想走非常規的路線,你可以概括我們用DMS做了什麼:將你的微型令牌(包括空白和註釋)作爲序列附加到語言令牌上。 –
是的,這就是我所做的,就像我在問題中提到的那樣,使用鏈表,儘管我最終使用了雙鏈表。儘管如此,內存消耗仍然讓我困擾,令牌的兩個額外指針成員相當多,不是嗎?我不知道,我想我會完成這個原型,看看它是如何工作的。 – Flavius