アレックスのドキュメント (第 5 章)は次のように述べています。
入力テキストの行番号と列番号を Alex に追跡させたい場合もあれば、自分で追跡したい場合もあります (たとえば、標準の 8 列とは異なるタブ幅を使用するなど)。
しかし、アレックス ポジション トラッカーでタブの幅を 8 から 4 に変更するのは、簡単ではなく難しいものです。このコードは、Alex が生成したルーチンの奥深くに隠されています。
-- this function is used by `alexGetByte`, which is used by `alex_scan_tkn`, which is
-- used by `alexScanUser` and `alexRightContext`,
-- which is used by `alex_accept` etc etc...
alexMove :: AlexPosn -> Char -> AlexPosn
alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (((c+7) `div` 8)*8+1)
alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1) 1
alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)