私はScalaパーサーコンビネーターを使用して書かれたインタープリターに取り組んでいます。私の通訳者は、字句解析と構文解析を2つのフェーズに分けています。レクサーの単体テストを作成して、正しい出力が生成されることを確認したいと思います。
現在、私はヘルパーメソッドメソッドを使用してユニットテストを行っています。これは以下に含まれています。このメソッドは、プログラムのソースコードをパラメーターとして受け取り、トークンオブジェクトのリストを返します。単体テストフレームワーク(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
}
}