我正在用Scala编写一个(简单的)编译器,已经将分词器变成了可迭代对象,现在需要编写解析器。计划使用递归下降策略,因此解析器将被分成多个方法,每个方法都调用其他一些方法。
我认为维护分词器迭代器的状态并在各个方法之间共享它是必要/可取的。这是正确的吗?如果是,我该如何做?如果不是,有哪些替代方案?
我认为维护分词器迭代器的状态并在各个方法之间共享它是必要/可取的。这是正确的吗?如果是,我该如何做?如果不是,有哪些替代方案?
{1,2,3}
可以是一个列表(如果你在看到{
时进入列表处理,并在遇到}
时退出),但不是1,2,3+7
(因为你会在意识到列表已经结束之前消耗掉+
))。def parse2(tokens: Iterator[String]) = List(tokens.next, tokens.next)
def parse1(tokens: Iterator[String]) = List(parse2(tokens), parse2(tokens))
val tokens = List("a","b","c","d").iterator
val parsed = parse1(tokens) //List(List(a, b), List(c, d))