使用Scala组合器解析创建对象的实例

问题描述 投票:2回答:1

我有这个解析器:

import scala.util.parsing.combinator.JavaTokenParsers

class RequestMappingParser extends JavaTokenParsers {
  def requestMapping: Parser[Any] = "@RequestMapping(" ~ commaDelimitedSeq ~ ")"
  def commaDelimitedSeq: Parser[Any] = repsep(keyValue, ",")
  def keyValue: Parser[Any] = key ~ "=" ~ value
  def key: Parser[Any] = "value" | "method"
  def value: Parser[Any] = """[^)]*""".r
}

我有这个简单的课程:

class MethodRequestMapping(val value: String, val method: String)

我的解析器可以解析此字符串:

"@RequestMapping(value = \"/ex/foos\", method = RequestMethod.GET)"

并返回Parser[Any]的结果。我希望它返回Parser[MethodRequestMapping]的结果。

我该如何做?我知道我必须做这样的事情:

def requestMapping: Parser[MethodRequestMapping] = "@RequestMapping(" ~ commaDelimitedSeq ~ ")" ^^ {
  // Some sort of pattern matching and creation of MethodRequestMapping
  // ???
}

但是到底发生了什么????还是最好以完全不同的方式来做?

scala parsing parser-combinators
1个回答
2
投票

首先,您使用的组合词的一半被创建为Parser[String],并且是您的类型注释将它们组合成Parser[Any](由于协方差而被允许,但在这种情况下也完全没有用)。

© www.soinside.com 2019 - 2024. All rights reserved.