【发布时间】:2011-09-22 18:30:07
【问题描述】:
我正在开发一个使用 Scala 解析器组合器编写的解释器。我的解释器将词法分析和解析分为两个阶段。我想为我的词法分析器编写单元测试,以确保它产生正确的输出。
现在,我正在使用一个辅助方法方法进行单元测试,我已将其包含在下面。该方法将程序的源代码作为参数,并返回一个 Token 对象列表。使用单元测试框架 (ScalaTest),我可以对生成的令牌列表进行模式匹配。
当前方法的问题:
- 在我的词法分析器中需要一个辅助方法来帮助进行单元测试
- 它使用一个while循环
- 它依靠手动构建和使用扫描器
似乎应该有更好的方法将程序的源代码转换为令牌列表。
我当前的工作版本(至少是相关部分):
class MyLexer extends StdLexical {
def lex(input:String): List[Token] = {
var scanner = new Scanner(input)
val result = new mutable.ListBuffer[Token]()
while (!scanner.atEnd) {
result.append(scanner.first)
scanner = scanner.rest
}
return result.toList
}
}
【问题讨论】:
-
为什么辅助方法应该存在于 MyLexer 类中?
标签: unit-testing parsing scala parser-combinators