2015-06-22 2 views
0

Я пишу синтаксический анализатор, который наследуется от JavaTokenParsers в том, что у меня есть функция следующим образом:Как создать экземпляр lexical.Scanner в классе 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]        ^

Почему эта ошибка в то время как я импортировал все пакеты?

ответ

1

JavaTokenParsers не реализует черту Scanners. Таким образом, вам нужно будет также расширить этот признак (или черту, которая расширяет его), чтобы иметь доступ к этому классу.

Если ваш парсер expr не принимает в качестве параметра Reader (не из его применяемого метода), вам нужно будет переопределить тип элементов и тип ввода, если я не ошибаюсь, чтобы это заработало.

Также есть причины, по которым вам необходимо иметь Reader[Token]?.

Если вы не нуждаетесь в Reader[Token] и так вы даете вход в простых строках,

phrase(expr)(new CharSequenceReader(s)) 

должен работать.

+0

спасибо, что он сработал с использованием CharSequenceReader (s) :-) – Rubbic

Смежные вопросы