我正在开发一个使用 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
}
}