-1

我在词法分析器中有数字模式

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

我想为字节添加另一种模式。字节包含从 diaposon 0 - f 的 2 个符号。我应该为字节写哪种模式?它会正确区分 11 :: byte 和 11 :: num 吗?

4

1 回答 1

0

如果您在词法分析器中添加两个重叠模式,那么它将失败或只是选择其中一个(我不知道 alex 的确切行为),所以这可能不是您想要的。

如果我理解正确,这里实际上有两个问题:

  1. 十进制和十六进制数字重叠
  2. 固定大小的数字类型重叠,例如 11 可以是 8 位或 32 位。

解决问题 1 的常用方法是为十六进制数字添加前缀。C 使用前缀0x。那么 17 将被写成0x11十六进制。

我认为您不应该尝试在词法分析器中解决问题 2,只需将数字保留为通用数字类型即可。稍后在类型检查期间,您可以确定上下文所需的确切类型,如果没有其他约束,则默认为一个类型。

于 2022-01-03T10:57:54.633 回答