Можно ли написать JSON-парсер без использования рекурсии? - PullRequest
3 голосов
/ 20 июля 2010

Можно ли написать JSON-парсер без использования рекурсии?Если да, то какой подход вы бы предложили?

Ответы [ 2 ]

4 голосов
/ 20 июля 2010

Возможно воспроизвести любой рекурсивный код с эквивалентной итеративной реализацией.

Этот вопрос довольно хорошо описывает это: Возможно ли удалить рекурсию из этой функции?

1 голос
/ 20 июля 2010

Я согласен с Джеймсом - любой рекурсивный код теоретически может быть реализован с использованием итеративного подхода. Метод стека, описанный по указанной ссылке, является допустимым вариантом. Альтернатива заключается в том, что вы можете жестко кодировать до глубины n, с очевидным риском того, что она будет ограничена указанной глубиной.

Не зная больше о среде и ограничениях, в которых вы пытаетесь запустить код обработки JSON, трудно сказать, какой подход лучше всего подходит. Некоторые вещи для рассмотрения:

  • За рекурсивным кодом обычно проще следовать, если вы можете управлять им (и совместимо с 99% примеров практически на любом языке для обработки JSON)
  • Итеративный код, использующий фиксированную глубину, может быть «более эффективным», поскольку он не требует большого использования стека, но не масштабируется до n сценариев с глубиной
  • Код на основе стека может обрабатывать n -глубинные сценарии, но может быть не столь интуитивно понятен другим программистам

Кроме того, возможно линеаризовать древовидную структуру (которая является неявным графом объектов JSON, предполагая, что только массив может иметь виртуальный корень «массива»). Это позволяет использовать метод обработки плоских потоков. Если вы сделаете еще один шаг и введете искусственные жетоны, такие как DOWN и UP, они могут быть легко читаемыми. Это то, что подходит для проектирования компилятора и анализа языка, но может быть полезно в качестве концепции здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...