0

В настоящее время я пытаюсь написать компилятор с использованием boost spirit x3. Я закончил синтаксический анализатор (без семантических действий и обработки ошибок прямо сейчас, просто разбираясь в ast). Поскольку я хочу реализовать язык для поддержки областей и вызовов функций, я спрашиваю себя, когда нужно проверить, существует ли вызываемая функция? Должен ли я проверять, существует ли функция в текущей области при построении ast (при синтаксическом анализе с семантическими действиями), или я должен проверить это при компиляции ast out? То же самое с областями объема. должен ли я наращивать стеки области при разборе, использовании семантических действий или при составлении статистики?Семантические проверки с повышающим духом x3

ответ

1

Проблема впечатляюще не определена.

Большинство из них во многом зависит от характера используемого вами языка (как это сделать?). У вас есть лексическая область? Закрытия? Будут ли у вас динамические стеки? Корутины? Будут ли переменные динамическими или полностью static? Ввод?).

Должен ли я проверять, существует ли функция в текущей области при построении ast (при синтаксическом разборе с семантическими действиями), или я должен проверить это при компиляции ast out?

Как я уже сказал, оба могут работы. Я обычно рекомендую разделение проблем. Просто просто синтаксический анализ и работа на АСТ (несколько раз) впоследствии намного проще обдумать и привести к более чистым, проще расширить код в большинстве случаев.

В зависимости от ситуации (например, если вы хотите, чтобы переменные потенциально затеняли некоторые ключевые слова или некоторые другие предикаты, поддерживающие контекст во время разбора), вам может потребоваться, например, поддерживать таблицу символов с известными идентификаторами в области видимости. Это будет - IME - составлять дизайнерский запах, и вы должны подумать, нужна ли вам сложность.

То же самое с областями объема. должен ли я наращивать стеки области при разборе, использовании семантических действий или при составлении статистики?

Опять же, делать вещи в проходах для компиляции обычно намного проще.

Смежные вопросы