如何在 JavaTokenParsers class 中实例化 lexical.Scanner?
How to instantiate lexical.Scanner in a JavaTokenParsers class?
我正在编写一个继承自 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] ^
为什么我在导入所有包时出现此错误?
JavaTokenParsers
没有实现 Scanners
特性。因此,您还需要从这个特征(或扩展它的特征)进行扩展才能访问这个 class。
除非你的 expr
解析器接受 Reader
作为参数(不是来自它的 apply 方法),否则你需要覆盖元素类型和输入类型,如果我不这样做的话错误地使这个工作。
还有什么理由需要 Reader[Token]
?
如果您不需要 Reader[Token]
并且由于您以纯字符串形式输入,
phrase(expr)(new CharSequenceReader(s))
应该可以。
我正在编写一个继承自 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] ^
为什么我在导入所有包时出现此错误?
JavaTokenParsers
没有实现 Scanners
特性。因此,您还需要从这个特征(或扩展它的特征)进行扩展才能访问这个 class。
除非你的 expr
解析器接受 Reader
作为参数(不是来自它的 apply 方法),否则你需要覆盖元素类型和输入类型,如果我不这样做的话错误地使这个工作。
还有什么理由需要 Reader[Token]
?
如果您不需要 Reader[Token]
并且由于您以纯字符串形式输入,
phrase(expr)(new CharSequenceReader(s))
应该可以。