Я работаю над интерпретатором, написанным с использованием комбинаторов анализатора 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
}
}