【发布时间】:2014-08-17 09:55:47
【问题描述】:
我正在使用 parsec 编写源到源转换,因此我的语言有一个 LanguageDef,我使用 Text.Parsec.Token.makeTokenParser 为它构建了一个 TokenParser:
myLanguage = LanguageDef { ...
commentStart = "/*"
, commentEnd = "*/"
...
}
-- defines 'stringLiteral', 'identifier', etc...
TokenParser {..} = makeTokenParser myLanguage
不幸的是,因为我定义了commentStart 和commentEnd,TokenParser 中的每个解析器组合器都是根据whiteSpace 实现的词位 解析器,而whiteSpace 吃空格以及 cmets。
在这种情况下保存 cmets 的正确方法是什么?
我能想到的方法:
- 不要定义
commentStart和commentEnd。将每个词位解析器包装在另一个组合器中,该组合器在解析每个标记之前抓取 cmets。 - 实现我自己的
makeTokenParser版本(或者使用一些泛化Text.Parsec.Token的库;如果是,是哪个库?)
在这种情况下做了什么?
【问题讨论】:
标签: parsing haskell comments parsec code-translation