如何在Scala中使用StdLexical类

时间:2013-01-06 03:06:59

标签: parsing scala

我一直在尝试使用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)
  }
}

它编译并运行但没有打印。有人能给我一个使用这个类的简单例子吗? (我希望在列表或类似内容中立即获得所有令牌)

1 个答案:

答案 0 :(得分: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方法。