Alex文档(第5章)says:
您可能希望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)
答案 0 :(得分:1)
一个想法是创建自己的包装器,以您希望的方式定义alexMove
。
在我的Mac上,包装器安装在/Library/Haskell/ghc-7.6.3/lib/alex-3.0.5/share /
中查找名为" AlexWrapper-monad"," AlexWrapper-monad-bytestring",...的文件驻留在您的系统上。
" -t"命令行选项告诉alex在哪里查找模板,但它也可能与包装器有关,因为它看起来包装器和模板位于同一目录中。