我對Scala分析器組合器有些困惑。 我使用閱讀器的定製實現直接讀取的標記列表:Scala分析器組合器和Reader無限循環
private class Token_Reader(tokens: List[Token], val pos: Token_Pos) extends Reader
{
def first = if(atEnd) null else tokens.head
def rest = if(atEnd) this else new Token_Reader(tokens.tail, new Token_Pos(pos.p + 1))
def atEnd = tokens.isEmpty
}
令我百思不解的是,atEnd
似乎是由實際解析器被完全忽略,從而導致無限循環/無限遞歸時使用*
/rep
。
參見HTTP ://www.scala-lang.org/node/5658它提出了同樣的問題。 – mrueg