0
我做了一個基於Parsing M-Expressions in Scala with combinators的詞法分析器。將方法添加到繼承的內部類
import scala.util.parsing.combinator.lexical._
import scala.util.parsing.combinator.token._
trait MyTokens extends Tokens {
case class Id(chars: String) extends Token
case class Num(chars: String) extends Token
}
class MyLexical extends Lexical with MyTokens {
def whitespace = rep(whitespaceChar)
def token: Parser[Token] = (
rep1(letter) ^^ { case charList => Id(charList mkString "") }
| rep1(digit) ^^ { case charList => Num(charList mkString "") }
)
}
object Main extends App {
val lexical = new MyLexical
val scanner = new lexical.Scanner("abc012def345")
def tokenList(s: lexical.Scanner): List[lexical.Token] =
if (s.atEnd) Nil
else s.first :: tokenList(s.rest)
println(tokenList(scanner))
}
它運行良好導致List(Id(abc), Num(012), Id(def), Num(345))
。但是,函數tokenList
應該是掃描器將其稱爲scanner.tokenList
的一種方法。爲了實現它,似乎應該重寫內部類MyLexical.Scanner
。可能嗎?如果可以,怎麼做?
我的錯誤'沒有發現:價值MyLexical',所以我定義'BetterScanner'和'tokenList'沒有參數在'MyLexical'中,並且'輸入lexical._',然後它就起作用了。 –