レクサーに数字のパターンがあります
$digit=0-9
$digit+ { \s -> TNum (readRational s) }
バイトに別のパターンを追加したい。バイトにはダイアポゾン 0 ~ f の 2 つのシンボルが含まれます。バイトにはどのパターンを書くべきですか? 11 :: byte と 11 :: num を正しく区別できますか?
レクサーに 2 つの重複するパターンを追加すると、失敗するか、単にそのうちの 1 つを選択するだけです (アレックスの正確な動作はわかりません)。
私がそれを正しく理解していれば、実際にはここで 2 つの問題が発生しています。
問題 1 を解決する一般的な方法は、16 進数にプレフィックスを追加することです。C はその0x
ために接頭辞を使用します。したがって、17 は0x11
16 進数のように記述されます。
レクサーの問題2を解決しようとするべきではないと思います.数値を一般的な数値型として保持してください. 後で型チェック中に、コンテキストで必要な正確な型を決定するか、他の制約がない場合は型をデフォルトにすることができます。