【发布时间】:2014-01-04 17:40:43
【问题描述】:
我(终于)完成了一个解析器,它处理我的 DSL 并将其转换为我的域对象。现在我想添加一些适当的错误处理,并且我希望将行号添加到解析器报告的错误中。
我找到的示例和答案here 和here 似乎表明我必须修改我的域对象以扩展scala.util.parsing.input.Positional。这个例子对我的案例来说有点过于简单了,而且(由于我的经验不足)我的案例似乎不太适合这个范式。
我的主要问题是我不希望我的域对象直接扩展Positional。它们在程序中与解析没有任何关系的其他地方使用(解析器只是程序的扩展,用于创建不同的数据输入方式)。另外,我不知道如何处理输出String(或我无法控制的其他类)的情况。还有一个问题是我的领域对象已经扩展了程序的其他对象,我不能简单地改变层次结构。
是否有任何替代方法可以干净地处理此问题,而无需修改域对象并将它们与Positional 耦合? (抱歉,如果我问一些与实现特征等有关的琐碎事情,因为我还是 Scala 的新手)
【问题讨论】:
标签: scala parsing line-numbers parser-combinators