Estoy escribiendo un analizador que hereda de JavaTokenParsers porque tengo la siguiente función:
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)
}
}
Estoy teniendo el siguiente error :
type Scanner is not a member of package scala.util.parsing.combinator.lexical
[error] val tokens = new lexical.Scanner(s)
[error] ^
¿Por qué tengo este error mientras he importado todos los paquetes?
Respuestas
1 para la respuesta № 1los JavaTokenParsers
no implementa el Scanners
rasgo. Por lo tanto, también necesitaría extenderse desde este rasgo (o un rasgo que lo extienda) para tener acceso a esta clase.
A menos que tu expr
analizador acepta el Reader
como parámetro (no de su método de aplicación), no tendrá que anular el tipo de elementos y el tipo de entrada si no me equivoco para hacer que esto funcione.
También hay alguna razón por la que necesita tener un Reader[Token]
?.
Si no necesitas un Reader[Token]
y ya que da su entrada en una cadena simple,
phrase(expr)(new CharSequenceReader(s))
Deberia trabajar.