Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы СПО-2.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
184.83 Кб
Скачать

Модуль № 2.

1. Методы лексического, семантического и синтаксического анализа. Регулярные языки.

Регулярные языки — самый простой тип языков. Поэтому они являются самым

широко используемым типом языков в области вычислительных систем. Время

на распознавание предложений регулярного языка линейно зависит от длины

входной цепочки символов.

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

Регулярные языки — очень удобное средство. Для работы с ними можно использовать регулярные множества и выражения, конечные автоматы. Регулярные

языки подробно рассматриваются в главе 3 «Лексические анализаторы».

2. Методы лексического, семантического и синтаксического анализа. Контекстно-свободные языки.

КС-языки лежат в основе синтаксических конструкций большинства современных языков программирования, на их основе функционируют некоторые до-

вольно сложные командные процессоры, допускающие управляющие команды

цикла и условия.

В общем случае время на распознавание предложений языка, относящегося к

типу 1 - (контекстно-зависимые (КЗ) языки), полиномиально зависит от длины входной цепочки символов (в зависимости от класса языка это либо кубическая, либо квадратичная зависимость).

Однако среди КС-языков существует много классов языков, для которых эта зависимость линейна. Практически все языки программирования можно отнести к одному из таких классов.

3. Методы лексического, семантического и синтаксического анализа. Классы кс-языков и грамматик.

Лексический анализ (сканер) — это часть компилятора, которая читает литеры

программы на исходном языке и строит из них слова (лексемы) исходного языка.

На вход лексического анализатора поступает текст исходной программы, а выходная информация передается для дальнейшей обработки компилятором на этапе синтаксического разбора. С теоретической точки зрения лексический анализатор не является обязательной, необходимой частью компилятора. Однако существуют причины, которые определяют его присутствие практически во всех компиляторах (более подробно они описаны в главе 3 «Лексические анализаторы»).

Синтаксический разбор — это основная часть компилятора на этапе анализа. Она выполняет выделение синтаксических конструкций в тексте исходной программы, обработанном лексическим анализатором. На этой же фазе компиляции проверяется синтаксическая правильность программы. Синтаксический разбор играет главную роль — роль распознавателя текста входного языка программирования.

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

компиляторов семантический анализ может частично входить в фазу синтаксического разбора, частично — в фазу подготовки к генерации кода.