我有一个包含对象的文本表示的文件。我编写了一个组合器解析器语法来解析文本并返回对象。在文本中,“#”是注释分隔符:从该字符到行尾的所有内容都将被忽略。空行也被忽略。我想一次处理一行文本,这样我就可以处理非常大的文件。
我不想用通用注释和空行逻辑弄乱我的解析器语法。我想删除这些作为预处理步骤。通过行将文件转换为迭代器,我可以执行以下操作:
Source.fromFile("file.txt").getLines.map(_.replaceAll("#.*", "").trim).filter(!_.isEmpty)
如何将这样的表达式的输出传递给组合器解析器?我不知道如何Reader
从这样的过滤表达式中创建一个对象。JavaFileReader
接口不是这样工作的。
有没有办法做到这一点,或者我应该把我的评论和空行逻辑放在解析器语法中?如果是后者,是否有一些util.parsing
包已经为我做了这个?