/ / ¿Cómo crear una instancia de lexical.Scanner en una clase JavaTokenParsers? - Escala, análisis, análisis léxico.

¿Cómo instanciar lexical.Scanner en una clase JavaTokenParsers? - scala, análisis sintáctico, análisis léxico

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 № 1

los 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.