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