Alex 文档(第 5 章)说:
您可能希望 Alex 跟踪输入文本中的行号和列号,或者您可能希望自己完成(例如,您可能使用与标准 8 列不同的制表符宽度)
但是在 Alex 位置跟踪器中将标签宽度从 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)