如何为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

上一篇: How to specify tab width for Alex lexer?

下一篇: error in wrapper template