我一直在尝试使用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)
}
}
它编译并运行但没有打印。有人能给我一个使用这个类的简单例子吗? (我希望在列表或类似内容中立即获得所有令牌)
答案 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方法。