我在词法分析器中有数字模式
$digit=0-9
$digit+ { \s -> TNum (readRational s) }
我想为字节添加另一种模式。字节包含从 diaposon 0 - f 的 2 个符号。我应该为字节写哪种模式?它会正确区分 11 :: byte 和 11 :: num 吗?
如果您在词法分析器中添加两个重叠模式,那么它将失败或只是选择其中一个(我不知道 alex 的确切行为),所以这可能不是您想要的。
如果我理解正确,这里实际上有两个问题:
解决问题 1 的常用方法是为十六进制数字添加前缀。C 使用前缀0x
。那么 17 将被写成0x11
十六进制。
我认为您不应该尝试在词法分析器中解决问题 2,只需将数字保留为通用数字类型即可。稍后在类型检查期间,您可以确定上下文所需的确切类型,如果没有其他约束,则默认为一个类型。