2015-06-22 40 views
0

我寫一個解析器從JavaTokenParsers繼承了,我有一個函數如下:如何在JavaTokenParsers類中實例化lexical.Scanner?

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作爲參數(不是來自它的apply方法),否則你需要重寫元素的類型和輸入類型,如果我沒有誤會使它工作。

也有任何理由你需要有一個Reader[Token]

如果您不需要Reader[Token]因爲你給你輸入一個普通字符串,

phrase(expr)(new CharSequenceReader(s)) 

應該工作。

+0

謝謝你使用CharSequenceReader(s):--) – Rubbic