使用 Scala 解析器组合器时,如何过滤从 Lexer 到 Parser 的标记序列?
让我解释一下——假设我有相当标准的 Lexer(扩展StdLexical
)和 Parser(扩展StdTokenParsers
)模式。词法分析器将字符序列转换为标记序列,然后解析器将标记序列转换为抽象语法树(类型为Expr
)。
我决定一些可能出现在流中任何位置的标记,我希望可以选择过滤掉,所以我想要一个适合 Lexer 和 Parser 之间的函数来删除这些标记。例如,我可能希望词法分析器标记注释,然后过滤掉这些注释。
编写此过滤器的最佳方法是什么?这可以使用解析器组合成语,但不是必须的。
示例当前代码:
val reader = new PagedSeqReader(PagedSeq.fromReader(reader))
val tokens = new MyParser.lexical.Scanner(reader)
val parse = MyParser.phrase(parser)(tokens)
我希望能够写出这样的东西:
val reader = new PagedSeqReader(PagedSeq.fromReader(reader))
val tokens = new MyParser.lexical.Scanner(reader)
val parse = MyParser.phrase(parser)(filter(tokens))