在編譯設計中,有人推薦製作一個名爲「NUMBER」的通用標記類,而不是定義整數,浮點數和雙精度數?我是否應該等到後來才弄清楚?我們應該從詞法分析器的NUMBER中區分出整數,浮點數和雙精度數嗎?
0
A
回答
0
與大多數此類問題一樣,唯一可能的答案是「取決於」。但總體而言,除非您在單通解析器中進行直接的計算器式解釋,否則使用多個數字標記類型是不必要的,因爲它只會使語法複雜化。
有許多腳本語言只有一種類型的編號(例如awk
),所以所有的數字標記都在詞法分析器中轉換爲雙精度浮點,並且根本不需要額外的標記類型。
C/C++的詞法分析器需要能夠識別「預處理數字」,一組包含各種格式的整數和浮點文字的集合以及大量根本無效的數字的字符串(「 42itous「),但不包括字符或布爾常量。一旦預處理完成,這些需要解決(或拒絕);在那之後,對於任何語法目的來說,區分不同的數字類型並不是真的必要,儘管它最終是代碼生成所必需的。
因此,relexer(即,後處理詞彙分析器)生成其語義值包括更詳細的類型信息的標記類型的「常量」並不令人驚訝。
在一個典型的表達語法,你將不得不一個CONSTANT
令牌類型,其語義值是包括恆定的實際類型和值變體,或你將有一個constant
非終結,其產品有不同的令牌類型與對應的列表用常量的實際類型和值填充變體語義值的動作。顯然,這些策略之間沒有太大的區別。個人而言,我幾乎總是會選擇詞法解析器,但那只是我自己。
堅持像數組聲明只包含維數的整數文字,迫使文法區分整數文字記號和其他文字記號通常是誘人的。但是語法並不總是產生像這樣的錯誤的錯誤消息的最佳位置;它可能更容易在語義分析期間生成有意義的錯誤消息。
相關問題
- 1. 雙精度和單精度浮點數?
- 2. yacc:從浮點數中區分整數
- 3. 雙精度浮點數和其他浮點數精度
- 4. c中的浮點數和雙精度#
- 5. 浮點數的數字精度分佈
- 6. 使用Scala組合器分析器來區分整數和浮點數
- 7. 無法在Scala中寫入雙精度浮點和雙精度浮點數的方法
- 8. 區分單精度和雙精度
- 9. 區分浮點和雙重
- 10. Java - 雙精度和整數
- 11. 浮點數/雙精度浮點數的小範圍,適用於整型(C++,VS2010)
- 12. 作爲兩個雙打總和的雙雙精度浮點數
- 13. 解析Pure Lua中的IEEE754雙精度浮點數?
- 14. boost :: random和boost:uniform_real與雙精度浮點數一起工作嗎?
- 15. 將雙精度轉換爲浮點數
- 16. Objective-C浮點數/雙精度
- 17. 是否有可能以保真度將浮點雙精度浮點雙精度到兩個十進制整數?
- 18. EXPECT_EQ爲雙精度或浮點數求和時出錯
- 19. 可精確表達爲浮點數/雙精度的整數範圍
- 20. 非常小的簡單精度和雙精度浮點數表示法
- 21. 用float浮點數的雙倍分數
- 22. 分解雙精度小數部分
- 23. 比較樓層/小區後的浮點數/雙精度比較
- 24. 拆分浮點數到Ruby中的整數和小數點
- 25. 從浮點數中減去的精度
- 26. 標準雙精度IEEE浮點數有多少位的精度?
- 27. Octave數據類型 - 浮點數和雙精度
- 28. 上下文無語法區分整數和浮點常量
- 29. 浮法arithemtic和雙精度?
- 30. 精度解析丟失浮點數
在我見過的大多數詞法分析器中,詞法分析器區分了整數和浮點文字,但我想你可以推遲這種決定,直到語義分析爲止。 –