簡體   English   中英

當我在詞法分析器中獲得數字模式時,字節模式

[英]Patter for byte when I got pattern for numbers in lexer

我在詞法分析器中有數字模式

$digit=0-9
   $digit+                       { \s -> TNum  (readRational s) }

我想為字節添加另一種模式。 字節包含從 diaposon 0 - f 的 2 個符號。 我應該為字節寫哪種模式? 它會正確區分 11:: byte 和 11:: num 嗎?

如果您在詞法分析器中添加兩個重疊模式,那么它將失敗或只是 select 其中之一(我不知道 alex 的確切行為),所以這可能不是您想要的。

如果我理解正確,這里實際上有兩個問題:

  1. 十進制和十六進制數字重疊
  2. 固定大小的數字類型重疊,例如 11 可以是 8 位或 32 位。

解決問題 1 的常用方法是為十六進制數字添加前綴。 C 為此使用前綴0x 那么 17 將被寫成十六進制的0x11

我認為您不應該嘗試在詞法分析器中解決問題 2,只需將數字保留為通用數字類型即可。 稍后在類型檢查期間,您可以確定上下文所需的確切類型,如果沒有其他約束,則默認為一個類型。

暫無
暫無

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

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