設計類Python編譯器時如何處理tab和space縮排?

時間 2021-05-11 22:20:03

1樓:Belleve

ptl 裡面的做法是這樣,維護乙個 stack,然後對每乙個可能作為語句分隔符的行首:

如果行首的空白序列和棧頂相同,判定為相同的縮排塊;

如果棧頂記錄的縮排序列是行首空白序列的真字首,則判定為縮排,當前行首空白壓棧;

否則,嘗試退棧並和新的棧頂比對,若退到某一級棧頂和當前行空白相同了,則判定為縮出,否則(堆疊彈空了)語法錯。

於是你可以 tab 空白隨便用了,混用也沒可以,只要保證是字首關係就行了

2樓:題葉

我思考過這個問題: Cirru 解析縮排的方案最後想的方案是用乙個變數記錄上一次縮排的層級, 後面每解析一行做一次比對, 並重新整理記錄,

我只考慮了空格, 而且語法也限定在很簡單的情況.

大多數基於縮排的語言都是同時支援 Tab 跟空格的, 我好像只看到 Nim 只支援空格的.

如果是發布給他人使用, 照顧不同的使用習慣是有必要考慮的.

3樓:

個人感覺可以把tab和換行符當成token處理。\n\t* 這樣,記錄\t的數量,這樣處理每乙個statement都可以方便地知道在哪一層縮排了。

編譯器本身是如何進行測試的?

靜態 動態分析,fuzzer等自動測試工具無法滿足我的需求 custom的 指令選擇 llvm dev Options for custom CCState,CCAssignFn,and GlobalISel 基於HEA演算法的 圖染色 llvm dev Register Allocation Gr...

華為方舟編譯器原理已公布,應當如何看待?

Lcng 路人十分樂觀地看待,華為的作業系統又近了一步 百分樂觀地看待,華為的程式語言也在路上了 萬分樂觀地看待,華為帝國就在不遠的前方 希望這不會是乙個過於封閉的帝國。 劉用濤 摸著石頭過河的人,在行進中難免會摔跤,難免褲腿上要沾上泥巴。當有人嘲笑說,你看那個人怎麼這麼狼狽,怎麼把自己弄得髒兮兮的...

編譯器如何處理 printf 這種語言自帶的函式?

豆芽 語言其實是個規範。如果要讓使用某個語言開發的程式要跑起來,除了編譯器,還得有工程技術支援,和語言擴充套件 庫 工程技術,比如程式執行時支援 程序載入技術 os介面對接等等 從題主的描述來講,我懷疑題主書都沒看就上來問問題。首先,printf不是語言自帶的函式。然後在parser之後的過程中,在...