Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора_ТЯПиМТ.doc
Скачиваний:
44
Добавлен:
13.09.2019
Размер:
935.94 Кб
Скачать

17) Синтаксические диаграммы

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

1) Каждому правилу вида <A>a1 | a2 |...| ak ставится в соответствие диаграмма, структура которой определяется правой частью правила.

2) Каждое появление терминального символа x в цепочке ai изображается на диаграмме дугой, помеченной этим символом x, заключенным в кружок.

3) Каждому появлению нетерминального символа <A> в цепочке ai ставится в соответствие на диаграмме дуга, помеченная символом, заключ¨нным в квадрат.

4) Порождающее правило, имеющее вид:

<A>a1a2...an

изображается на диаграмме следующим образом:

5) Порождающее правило, имеющее вид:

<A>a1 | a2 | ... | an

изображается на диаграмме так:

6) Если порождающее правило задано в виде итерации:

<A>{a}*,

то ему соответствует диаграмма:

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

Правила 3-6 предусматривают, что в качестве цепочки a1 на объединенной диаграмме могут быть использованы диаграммы построенные для этих цепочек. В качестве примера рассмотрим следующую грамматику с начальным символом <A> :

Г1. 14: Vт = { x, +, (, ) }, Va = {<A>, <B>, <C>},

R = {<A>x | (<B>),

<B><A><C>,

<C>{+<A>}*}.

Синтаксические диаграммы для такой грамматики имеют вид:

Заменяя нетерминальные символы, соответствующими диаграммами, получаем объединенную диаграмму в виде:

1.4.4. Резюме

Для задания правил используются различные формы описания: символическая, форма Наура-Бэкуса, итерационная форма и синтаксические диаграммы.

В практических применениях вместо символического представления схем грамматик обычно используют форму Наура-Бэкуса, или синтаксические диаграммы.

18)Лексический анализатор (англ. lexical analyzer или коротко lexer) — это программа или часть программы, выполняющая лексический анализ. Лексический анализатор обычно работает в две стадии:сканирование и оценка.

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

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

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

19) Синтаксический анализатор (парсер) — это программа или часть программы, выполняющая синтаксический анализ.

Прямоугольник 14

Пример разбора выражения в дерево

При парсинге исходный текст преобразуется в структуру данных, обычно — в дерево, которое отражает синтаксическую структуру входной последовательности и хорошо подходит для дальнейшей обработки.

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

Всё что угодно, имеющее «синтаксис», поддается автоматическому анализу.

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

Структурированные данные — данные, языки их описания, оформления и т. д. Например, XMLHTMLCSS, ini-файлы, специализированные конфигурационные файлы и т. п.

SQL-запросы (DSL-язык)

математические выражения

регулярные выражения (которые, в свою очередь, могут использоваться для автоматизации лексического анализа)

формальные грамматики

Лингвистика — человеческие языки. Например, машинный перевод и другие генераторы текстов.

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