簡體   English   中英

為什么我們在編譯器設計的詞法分析中將字符串視為單個標記?

[英]Why we count a string as a single token in lexical analysis of compiler design?

我正在學習編譯器設計。 編譯器中詞法分析器的任務是將代碼轉換為令牌的stream。 但我很困惑為什么我們將字符串視為單個標記。 例如 - printf("%d is integer", x); 在這個語句中printf , ( , "%d is integer" , , , x , ) , ; 是標記,但為什么字符串中的%d不被視為單獨的標記?

因為像%d (或任何其他字符串內容)這樣的格式說明符在語法上沒有意義——沒有依賴於它們的語言語法元素。 字符串內容(包括像%d這樣的格式說明符)是數據,而不是代碼,因此對編譯器沒有意義。 字符序列%d僅在運行時有意義,並且僅對*printf / *scanf系列函數有意義,並且僅作為格式字符串的一部分。

要將%d識別為不同的標記,您必須標記整個字符串- " , %d , is , integer , " 這會自行打開一大堆蠕蟲,使字符串的解析更加困難。

一些編譯器確實會檢查格式字符串 arguments 到printfscanf調用以進行一些基本的健全性檢查,但這已經發生在標記化之后。 在標記化階段,您不知道這是對printf庫 function 的調用。 直到在語法分析之后,編譯器才知道這是一個特定的庫調用並且可以執行這種檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM