如果沒有遞迴程式語言,或者需要更高的分析效率,是否還有其它實現LL 1 分析的方法呢?

時間 2021-06-20 04:55:16

1樓:light0x00

自己維護乙個棧不就可以模擬遞迴了,分析表驅動的LL1就是這樣實現的,不要先入為主地以為一定要以組合子這種函式遞迴呼叫來實現。

再者,編譯器層面方法遞迴也只是維護了個方法棧,遞迴沒有什麼魔法。

2樓:navegador

現實世界是不存在遞迴的,遞迴只是一種描述手段,遞迴是對實際問題的一種打包壓縮。

現實中的遞迴都會被展開成棧 ,一步一步一級一級一層一層順序處理,現實世界是處理不了無窮的:

要麼遞迴有終止條件(最終可以被遍歷完畢),

要麼被強制終止(爆棧),

要麼只算當前要的(lazy模式),後續的請求時候再算再取,這種情況下高階程式本身變成了一種資料。

程式語言不需要原生支援遞迴,只要能 1.順序遍歷 2.跳轉就可以解壓遞迴這種壓縮包。

3樓:趙馮平

首先說明:我們實現語法分析程式的程式語言不必支援遞迴呼叫。

計算機的最主要特點就是快,它每秒能處理數以億計的結點資料,為了不重複又不遺漏地處理每乙個結點的資料,計算機必須按照一定的順序處理資料。本質上說,如果不考慮資料本身的屬性,處理順序有且僅有2種:棧和佇列,棧是先進後出的結構,即先產生的結點資料後處理;佇列是先進先出的結構,即先產生的結點資料先處理。

集合、線性表、樹、圖等資料結構,其結點的處理順序最終是以棧或佇列的方式實現;深度優先演算法用棧實現,廣度優先演算法用佇列實現;遞迴也是用棧實現的。

在任何應用場景下,如果不考慮結點資料本身的屬性,棧和佇列足以應付一切。

如果考慮資料的屬性,還有優先佇列(堆)、雜湊(雜湊表)等儲存和處理順序。

什麼樣的程式語言會不支援遞迴呢?

趙馮平 早期的BASIC語言不支援遞迴,80年代早期學習資料結構 編譯原理時,所有的作業及課程設計,都用BASIC語言,根本沒遞迴可用。樹的各種遍歷,圖的深度優先遍歷,深度優先搜尋演算法,快速排序等等,全用棧來實現。一切計算處理順序完全靠自己用棧來把握,實在是太辛苦了,好處就是現在無論什麼程式,棧或...

如果宇宙沒有人類或者更高階文明,再或者沒有會思考的生命,那這個宇宙還有沒有意義?

道可道,非常道。名可名,非常名。無名天地之始,有名萬物之母。故常無慾以觀其妙。常有欲以觀其徼。此兩者同出而異名,同謂之玄,玄之又玄,眾妙之門。道同你所言之宇宙,是一種觀察者的姿態。而道為何?宇宙為何?每乙個人都會有一種客觀的理解,這種客觀理解是可以言說的,或者是被命名的,但是每個人都會有不同的體驗,...

C語言中有沒有3維陣列或者更高維的陣列?

沐雨澄風 c語言事存在三維陣列的 比如char s 3 4 1024 代表乙個三行四列的每乙個元素都是乙個字串的乙個陣列。更高維不知道hh 北極 首先 有三維或者更高維度的陣列,C語言規範中沒有指定最高可以到多少,翻了一遍C99沒有找到類似的規定。用GCC實驗了一下,GCC不檢測維數多少,而是限制陣...