У меня есть парсер, который фактически представляет собой набор рекурсивных функций, работающих на последовательности лексерных токенов.
Проблема, с которой я сталкиваюсь, заключается в том, что последовательность, кажется, перезапускается с самого начала при рекурсивных вызовах функций. Учитывая следующее определение скелета для функции 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
заканчивается позицией в начале последовательности.
Любые идеи о том, как сохранить последовательность, где она должна быть?
ТИА