我正在编写一个继承自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] ^
为什么导入所有软件包时出现此错误?
答案 0 :(得分:1)
JavaTokenParsers
未实现Scanners
特征。因此,您还需要从此特征(或扩展它的特征)扩展,以便能够访问此类。
除非你的expr
解析器接受Reader
作为参数(不是来自它的apply方法),否则你需要覆盖元素的类型和输入类型,如果我没弄错的话使这个工作。
还有什么理由需要Reader[Token]
吗?
如果您不需要Reader[Token]
,并且因为您以明文字符串提供输入,
phrase(expr)(new CharSequenceReader(s))
应该有用。