如何为Alex lexer指定制表符宽度?
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)
一个想法是创建你自己的包装,它定义了你想要的方式alexMove
。
在我的Mac上,封装程序安装在/Library/Haskell/ghc-7.6.3/lib/alex-3.0.5/share/
查找名为“AlexWrapper-monad”,“AlexWrapper-monad-bytestring”的文件位于系统中。
“-t”命令行选项告诉alex在哪里查找模板,但它也可能与包装有关,因为它看起来包装和模板位于相同的目录中。
链接地址: http://www.djcxy.com/p/65633.html