scala - 在 Scala 中为解析器组合器 II 创建测试

标签 scala testing parser-combinators

考虑 this在 Scala 中为术语语言实现解析器的源代码。旨在测试其功能的主要功能定义为:

def main(args: Array[String]): Unit = {
    val stdin = new java.io.BufferedReader(new java.io.InputStreamReader(System.in))
    val tokens = new lexical.Scanner(stdin.readLine())
    phrase(term)(tokens) match {
      case Success(trees, _) =>
        for (t <- path(trees))
          println(t)
        try {
          print("Big step: ")
          println(eval(trees))
        } catch {
          case TermIsStuck(t) => println("Stuck term: " + t)
        }
      case e =>
        println(e)
    }
  }

我写了下面的测试:

package fos

import org.scalatest.FunSuite


class ArithmeticTest extends FunSuite {

  test("testTerm") {

    Arithmetic.term(new Arithmetic.lexical.Scanner("if iszero pred pred 2 then if iszero 0 then true else false else false")) match {
      case Success(res,next) => assert(res == If(IsZero(Pred(Pred(Succ(Succ(Zero))))),If(IsZero(Zero),True,False),False))
      case Failure(msg,next) => assert(false)
    }
  }

}

不幸的是,即使我像上面的链接那样混入 StandardTokenParsers,也无法识别成功和失败的情况。我怎样才能让它工作?

最佳答案

您需要 Arithmetic.SuccessArithmetic.Failure,就像您拥有 Arithmetic.lexical.Scanner 一样。或者,您可以import Arithmetic._

关于scala - 在 Scala 中为解析器组合器 II 创建测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58063261/

相关文章:

parsing - 深度扩展解析器库的方法

scala - 展平 Future[Option[Option[T]]] 的 Option 部分

scala - Scala 中有快捷方式类型边界吗?

scala - 引用由抽象类型成员遮蔽的泛型类型参数

java - 依赖注入(inject): templates (/generics) or virtual functions?

testing - 如何获取 testCafe 退出代码

java - 为什么要对相关测试进行分组

scala - 解析器组合器 : Does repsep allows back-tracking?

scala - 访问 Scala 解析器正则表达式匹配数据

scala - 在 Akka 中为多个 Actor 订阅 Dead Letters