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及其分词方法。

于 2013-01-06T11:37:07.483 回答