[!] pascal.js-intro Обзор кода проекта в стартовом состоянии - пишем свой интерпретатор
Primary tabs
У нас есть как тексты (легше поддерживаться в актуальном состоянии и править) так и видео. См. далее
Текстовые материалы
Видео-материалы
- Начало работы, запуск теста и отладки- Pascal-js-intro Пишем интерпретатор: https://youtu.be/CMnLeECoLAg
- FileIO и общий обзор частей Интерпретатора pascal.js-intro: https://youtu.be/ToKkIgo84mI
- Синтаксический анализатор - обзор: https://youtu.be/nvQbl9UVY0Q -- в видео используется в т.ч. текст по стартовой схеме ФБН для pascal.js-intro
- Как и какое именно дерево программы (АСТ - абстрактное синтаксическое дерево) строит синтаксический анализатор: https://youtu.be/xytN6toEUfI -- в видео используется в т.ч. текст по стартовой схеме ФБН для pascal.js-intro
- Log in to post comments
- 1400 reads
NewDeveloper
Sun, 07/30/2023 - 13:17
Permalink
Вопрос по структуре кода
В синтаксическом анализаторе класс NumberConstant задействован как "обертка" для класса IntegerConstant из лексического анализатора. Допустимо ли: в синтаксическом анализаторе не применять класс NumberConstant или использовать его для переименования объекта IntegerConstant, чтобы снизить вложенность объектов ?
Ответ:
IntegerConstant это класс для символа. А NumberConstant — класс для элементов дерева. У таких элементов дерева, как числа и идентификаторы, нет дочерних элементов в синтаксическом дереве, поэтому они выглядят как обёртки. А, например, у Addition, есть left и right. Но у всех элементов дерева есть поле symbol для объекта слова. Здесь такое разделение сделано, для элементов дерева одни классы, для символов (слов) — другие. С одной стороны, можно минимизировать, конечно. Я считаю, избавляться от IntegerConstant неправильно. Иначе, у одних элементов дерева объект-символ будет лежать в this.symbol, другие сами будут одновременно символами. Если интерфейсы у всех классов для элементов дерева однообразные, то легче писать универсальные методы, не нужно определять, какой интерфейс использовать для какого объекта.