讓我們看看詞法分析中標識符的狀態圖。基本上,它說,只要分析儀讀取除數字字母之外的任何字符,則將該標記返回爲(標識符,屬性)對。所以,根據這條規則, 在讀取字符串dtf56 * f %% f時,生成的令牌如下?詞法分析中的混淆
dtf56:標識符
F:標識
F:標識
我想的是,詞法分析器應該在這種情況下,拋出一個錯誤,因爲這是一個字符串。作爲一個普遍的問題,什麼「其他」字符應該返回一個詞位呢?
讓我們看看詞法分析中標識符的狀態圖。基本上,它說,只要分析儀讀取除數字字母之外的任何字符,則將該標記返回爲(標識符,屬性)對。所以,根據這條規則, 在讀取字符串dtf56 * f %% f時,生成的令牌如下?詞法分析中的混淆
dtf56:標識符
F:標識
F:標識
我想的是,詞法分析器應該在這種情況下,拋出一個錯誤,因爲這是一個字符串。作爲一個普遍的問題,什麼「其他」字符應該返回一個詞位呢?
如果使用星號和百分號是合法的字符,它應該返回他們也分開。你的第一句話的重點是分析應該停止並返回到目前爲止累積的令牌,當遇到不能成爲它的一部分的字符時。
我感到困惑的是什麼時候應該返回一個詞位。例如,對於字符串56fdt,我應該返回56作爲整數和fdt作爲標識符?或者,我應該拋出一個錯誤?
根據你的狀態圖你應該單獨返回它們。標識符只能以字母開頭。這就是符號的意思。
如果你遇到一個角色,是不是你要掃描的語言的字母表的一部分,就應該只有「拋出一個錯誤」,並且實用的工具,如彎曲(1)它實際上是更好地將它們返回給解析器(假設yacc(1)和朋友)讓解析器的錯誤恢復規則生效,而不是僅僅打印可能長的「非法字符」錯誤字符串。
那麼,底線是毫無疑問地遵循狀態轉換圖? (當我問這個問題的時候,我感覺自己像個kn手)腳)。
的狀態圖說,如果你發現在狀態9日的信函,轉換到狀態10,並留在它,而你有更多的字母或數字,然後,當停止,輸出的累計遊戲幣作爲ID。如果你正在分析的語言正確,你應該毫無疑問地遵循狀態圖。 [有語言中56fdt
是一個合法的標識符,但在這種情況下,狀態圖會有所不同,非常不同。]
如果使用星號和百分號爲合法字符,它應該返回他們也分開。你的第一句話的重點是分析應該停止並返回到目前爲止累積的令牌,當遇到不能成爲它的一部分的字符時。但是,即使沒有引用它,談論一些未知的狀態圖也沒什麼意義。 – EJP
我的不好。我現在添加了狀態圖。 –
我感到困惑的是什麼時候應該返回一個詞位。例如,對於字符串56fdt,我應該返回56作爲整數和fdt作爲標識符?或者,我應該拋出一個錯誤? –