1

使ってみましscala.util.parsing.combinator.lexical.StdLexicalたが、やり方がわかりません。私はこのようにしようとしています:

import scala.util.parsing.combinator.lexical.StdLexical

class Foo extends StdLexical {
  def main(args: Array[String]) {

    val input = """
    class Main {
      def main(args: Array[String]) {
        println("hello world")
      }
    }
    """
    val scanner = new Scanner(input)

    println(scanner.first)
  }
}

コンパイルして実行しますが、何も出力されません。このクラスを使用した簡単な例を誰か教えてもらえますか? (できれば、リストなどで一度にすべてのトークンを取得したい)

4

1 に答える 1

2

classの代わりにを使用するため、出力が得られないためobject、コードが実行されることはありません。

すべてのトークンを取得するには、それらを手動でフェッチする必要があります。

def loop(s: Scanner, token: Seq[Token]): Seq[Token] =
  if (s.atEnd) token
  else loop(s.rest, token :+ s.first)

println(loop(new Scanner(input), Vector()))

それにもかかわらず、StdLexical完全なScala文法をトークン化するわけではありません。これが必要な場合は、Scalariformとそのtokeniseメソッドを使用することをお勧めします。

于 2013-01-06T11:37:07.483 に答える