说:文档(第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)发布于 2014-07-12 16:15:14
一个想法是创建您自己的包装器,它以您想要的方式定义alexMove。
我的Mac包装器安装在/Library/Haskell/ghc-7.6.3/lib/alex-3.0.5/share/中。
查找名为"AlexWrapper-monad“、"AlexWrapper-monad-bytestring”的文件.驻留在您的系统中。
"-t“命令行选项告诉亚历克斯在哪里查找模板,但它也可能属于包装器,因为包装器和模板似乎驻留在同一个目录中。
https://stackoverflow.com/questions/24714454
复制相似问题