В настоящее время я пытаюсь написать компилятор с использованием boost spirit x3. Я закончил синтаксический анализатор (без семантических действий и обработки ошибок прямо сейчас, просто разбираясь в ast). Поскольку я хочу реализовать язык для поддержки областей и вызовов функций, я спрашиваю себя, когда нужно проверить, существует ли вызываемая функция? Должен ли я проверять, существует ли функция в текущей области при построении ast (при синтаксическом анализе с семантическими действиями), или я должен проверить это при компиляции ast out? То же самое с областями объема. должен ли я наращивать стеки области при разборе, использовании семантических действий или при составлении статистики?Семантические проверки с повышающим духом x3
ответ
Проблема впечатляюще не определена.
Большинство из них во многом зависит от характера используемого вами языка (как это сделать?). У вас есть лексическая область? Закрытия? Будут ли у вас динамические стеки? Корутины? Будут ли переменные динамическими или полностью static? Ввод?).
Должен ли я проверять, существует ли функция в текущей области при построении ast (при синтаксическом разборе с семантическими действиями), или я должен проверить это при компиляции ast out?
Как я уже сказал, оба могут работы. Я обычно рекомендую разделение проблем. Просто просто синтаксический анализ и работа на АСТ (несколько раз) впоследствии намного проще обдумать и привести к более чистым, проще расширить код в большинстве случаев.
В зависимости от ситуации (например, если вы хотите, чтобы переменные потенциально затеняли некоторые ключевые слова или некоторые другие предикаты, поддерживающие контекст во время разбора), вам может потребоваться, например, поддерживать таблицу символов с известными идентификаторами в области видимости. Это будет - IME - составлять дизайнерский запах, и вы должны подумать, нужна ли вам сложность.
То же самое с областями объема. должен ли я наращивать стеки области при разборе, использовании семантических действий или при составлении статистики?
Опять же, делать вещи в проходах для компиляции обычно намного проще.
- 1. Разбор номера в строку с повышающим духом x3
- 2. Анализировать HTML избежать последовательностей с повышающим духом
- 3. Синтаксические пару Интсов с повышающим духом
- 4. разбор в структуры с булевыми или перечислениями членов с повышающим духом x3
- 5. Разбор рекурсивных правил с духом x3
- 6. Как разрешить КИ пробелов и запретить плохие с повышающим духом
- 7. Синтаксический список строк с последующим списком строк с духом x3
- 8. данные скоблить с Духом
- 9. Max_element с повышающим directory_iterator
- 10. Дерева с повышающим shared_ptr
- 11. Проблемы с духом и форвардом декларации
- 12. Синтаксической грамматику с Boost Духом
- 13. находка() проблемы с повышающим bimap
- 14. Помощи с повышающим затруднительным/функциями
- 15. Начиная с Spirit X3
- 16. Как разобрать данные в C++ Struct с повышающим духом, если у меня есть «или» («|») в моих грамматиках
- 17. Семантические ошибки
- 18. ошибка компиляции с повышающим Hana определить структура
- 19. Понимать метод addField SolrInputDocument с повышающим значением
- 20. RAII с повышающим усилением :: program_options и options_description
- 21. проблем, когда сборка с повышающим filesytem
- 22. Семантические типы, связанные с компилятором
- 23. Несколько verticles vertx-x3
- 24. Семантические методы в IOT
- 25. emacs семантические окна непоследовательны
- 26. семантические отношения в UML
- 27. Динамические, семантические URL-маршруты
- 28. Семантические правила в компиляторе
- 29. Семантические запросы в Java
- 30. Семантические линии Emacs