fry*_*bob 6 whitespace parsing haskell parsec
我想使用Parsec makeTokenParser来构建我的解析器,但我想使用我自己的定义whiteSpace.执行以下操作将替换whiteSpace为我的定义,但所有lexeme解析器仍使用旧定义(例如,P.identifier lexer将使用旧的whiteSpace).
...
lexer :: P.TokenParser ()
lexer = l { P.whiteSpace = myWhiteSpace }
where l = P.makeTokenParser myLanguageDef
...
Run Code Online (Sandbox Code Playgroud)
查看代码,makeTokenParser我想我明白为什么它以这种方式工作.我想知道是否有任何变通方法可以避免完全复制代码makeTokenParser?
可悲的是,我认为没有办法.在使用局部定义makeTokenParser递归是指自己,那么,你已经注意到,lexeme使用whiteSpace如其中,而不是whiteSpace记录部件您在更换lexer对象.
代码是嘲弄的,因为它使用与构造函数中的本地函数makeTokenParser和作为记录成员的相同名称TokenParser.它们实际上是完全不同的实体.
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |