Определения функции Шунтирования-Ярда

Есть ли у кого-нибудь понимание о добавлении функции определение поддержка парсера на базе Shunting-Yard?

Определения с одним утверждением просты. Я могу изменить свой синтаксический анализатор так, чтобы он проходил внутри блока (это очень расплывчато!), Чтобы обрабатывать определения функций как подпрограмму, но это похоже на пометку.

Есть ли лучшие решения?

Обновить

Итак, мне удалось заставить это работать с удивительно несколькими модификациями. Фаза SY выдвигает оба { а также } в стек.

Когда синтаксический анализатор (следующий этап в конвейере) встречает { (blockstart), он создает новый Block (AST) и помещает его в стек RPN. Когда синтаксический анализатор достигает }, он создает вектор узлов AST и выталкивает стек, пока не встретит Block, В этот момент вектор узлов, которые встретились между концом блока и началом блока, добавляется в коллекцию выражений (операторов) блока.

Когда анализатор достигает блока в стеке, он проверяет, является ли следующий (более низкий в стеке) узел вызовом функции. Если это так, он извлекает вызов функции, создает узел определения функции и использует ранее сгенерированный блок и вызов для определения функции.

Это очень расплывчатое / почти бесполезное описание — Я постараюсь написать подробное объяснение и выложить его где-нибудь.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]