我有一个解析器,它实际上是一组在词法分析器令牌上运行的递归函数。

我遇到的问题是序列似乎从递归函数调用开始重新启动。给出函数 Parse

的以下框架定义
    let restricted = Seq.take_while token_search tokens
    let compiled_nodes = Seq.fold (fun list (next: Lexer.Token) -> list @ parse_token this restricted next) [] restricted

函数 parse_token 可能导致对 Parse 的调用。

然而,当发生这种情况时,参数 tokens 最终定位在序列的开头。

关于如何将序列保持在需要的位置的任何想法?

TIA

有帮助吗?

解决方案

我认为您可能需要发布一个稍微大一点的片段,因为我不太关注您。

也就是说,一个序列(IEnumerable)只是 - 一个序列,每次你(foreach)或Seq.Whatever over,它都会'重新'迭代'序列。我不清楚你想做什么,以及你期望发生什么,但对于解析,将'标记'表示为序列可能是'错误的',因为你通常将标记分为消耗/提交区域和前瞻区域。

另请注意,您通常不希望“迭代序列”产生副作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top