我对 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
。