我正在编写一个解析器,它继承自JavaTokenParsers,因为我有如下函数:
import scala.util.parsing.combinator.lexical._
import scala.util.parsing._
import scala.util.parsing.combinator.RegexParsers;
import scala.util.parsing.combinator.syntactical.StdTokenParsers
import scala.util.parsing.combinator.token.StdTokens
import scala.util.parsing.combinator.lexical.StdLexical
import scala.util.parsing.combinator.lexical.Scanners
import scala.util.parsing.combinator.lexical.Lexical
import scala.util.parsing.input._
import scala.util.parsing.combinator.syntactical._
import scala.util.parsing.combinator.token
import scala.util.parsing.combinator._
class ParseExp extends JavaTokenParsers{
//some code for parsing
def parse(s:String) = {
val tokens = new lexical.Scanner(s)
phrase(expr)(tokens)
}
}我得到了以下错误:
type Scanner is not a member of package scala.util.parsing.combinator.lexical
[error] val tokens = new lexical.Scanner(s)
[error] ^为什么在导入所有包时出现此错误?
发布于 2015-06-22 21:20:09
JavaTokenParsers不实现Scanners特性。因此,您也需要从这个特性(或扩展它的特性)扩展,才能访问这个类。
除非您的expr解析器接受Reader作为参数(而不是从它的apply方法中),否则,如果我没有弄错,那么您需要覆盖元素的类型和输入类型。
另外,有什么理由需要Reader[Token]吗?
如果您不需要一个Reader[Token],并且由于您用一个简单的字符串提供输入,
phrase(expr)(new CharSequenceReader(s))应该行得通。
https://stackoverflow.com/questions/30989689
复制相似问题