Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ШПОРЫ_ТЯП.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.63 Mб
Скачать
  1. Неоднозначность

Для многих грамматик любому предложению, которое можно сгенерировать, соответствует единственное синтаксическое дерево, а также единственное правое или левое порождение. Фактически, эти три условия эквивалентны: из любого из них следуют два других. Иными словами, если одно из следующих утверждений справедливо, то справедливы и остальные.

    • Каждое сгенерированное грамматикой предложение имеет единственное левое порождение.

    • Каждое сгенерированное грамматикой предложение имеет единственное правое порождение.

    • Каждое сгенерированное грамматикой предложение имеет единственное синтаксическое дерево.

Г рамматики, для которых справедливы вышеуказанные утверждения, называются однозначными (unambiguous). В противном случае грамматика является неоднозначной (ambiguous). Если все грамматики, генерирующие язык, являются неоднозначными, язык также называют неоднозначным.

11.Понятие лексического анализа

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

На этапе лексического анализа происходит формирование языковых символов из последовательностей знаков. В языке С содержится 6 типов символов: ключевые слова (const, char, if,else), идентификаторы (sum, main, printf), константы (27, 3.14 ,017(восьмеричная система), строковые литералы («Katherine»), операторы (+,--,++,-), знаки пунктуации , {,] , ; каждый из этих типов символов формируется лексическим анализатором в процессе лексического анализа. Процесс создания лексического анализатора достаточно легко автоматизируется, а инструментальные средства для его создания на основе регулярных грамматик всегда доступны. Лексический анализатор выполняет задачи: удаление комментариев, введение номеров строк, вычисление констант.

12.Лексический анализ с помощью регулярных выражений

Благодаря сравнительно простой природе символов, их всегда можно представить с помощью регулярных выражений или, эквивалентно, грамматик 3-го типа. Процесс создания лексического анализатора легко автоматизируется, а инструментальные средства для его создания на основе регулярных грамматик (или регулярных выражений) всегда доступны.

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

  • Удаление комментариев.

  • Введение номеров строк.

  • Вычисление констант.

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

Лексический анализатор всего лишь распознает символы языка для передачи их синтаксическому анализатору. Порядок следования символов для него абсолютно не важен. const char typedef >> + Каждый отдельный символ полностью корректен. То, что данная последовательность не составляет начала (или хотя бы фрагмента) какой-либо программы, должно быть обнаружено синтаксическим анализатором.

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

letter (letter | digit)*

Подобным образом можно представить и действительное число.

(+| ‒)digit*.digit digit*

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]