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

Лекция № 7

Формы Бэкуса Наура.

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

То, что единица является цифрой, выражается в БНФ следующим образом:

< цифра > :: =1 (*)

Чтобы отметить, что понятие цифра не может встречаться в предложениях описываемого языка, а используется лишь для того, чтобы понять, описать эти предложения, это понятие заключается в угловые скобки ‘< … >’. Такое понятие является синтаксическим и называется нетерминалом (нетерминальным символом). Символ, который может встречаться в предложениях описываемого языка, называется терминалом (терминальным символом). Запись (*) называется продукцией или правилом (заменой). Левая часть правила – нетерминальный символ, а правая часть – непустая конечная цепочка нетерминальных и/или терминальных символов.

Символ ‘ ::= ’ читается как «может состоять из».

Если понятие, выраженное нетерминальными символами, включает набор терминальных символов, то используется символ ‘ | ’, который читается как «или».

Полное описание понятия «цифра» будет выглядеть следующим образом:

< цифра > :: = 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ,

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

Введем понятие константы целого типа. Константа целого типа – это конечная последовательность не менее чем из одной цифры.

Тогда константы целого типа могут быть следующим образом рекурсивно определены:

< константа > :: = < цифра >

< константа > :: = < константа > < цифра >

< цифра > :: = 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

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

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

Например, выведем предложение «325»:

< константа > => < константа > < цифра > => < константа > 5 =>

=> < константа > < цифра > 5 => < константа > 25 => 325

Символ ‘=>’ обозначает одну замену, непосредственный вывод.

Грамматика упрощенных арифметических выражений:

< выражение > :: = < выражение > + < выражение >

< выражение > :: = < выражение > - < выражение >

< выражение > :: = < выражение > * < выражение >

< выражение > :: = (< выражение >)

< выражение > :: = < константа >

< константа > :: = < цифра >

< константа > :: = < константа > < цифра >

< цифра > :: = 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Пример: представление предложения (1+2)*4 методом выбора:

< выражение > => < выражение > * < выражение > => ( < выражение >) * < выражение > => ( < выражение > + < выражение > ) * < выражение > => ( < константа > + < выражение > ) * < выражение > => ( < цифра > + < выражение > ) * < выражение > => ( 1 + < выражение > ) * < выражение > => ( 1 + < константа > ) * < выражение > => ( 1 + < цифра >) * < выражение > => ( 1 + 2 ) * < выражение > => ( 1 + 2 ) * < константа > => ( 1 + 2 ) * < цифра > => ( 1 + 2 ) * 4

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

Дерево разбора.

< выражение >

< выражение > * < выражение >

( < выражение > ) < константа >

< выражение > + < выражение > < цифра >

< константа > < константа > 4

< цифра > < цифра >

1 2

Это дерево соответствует тем правилам замены, которые исполнялись ранее (см. пример выше). Каждая ветка дерева разбора продолжается до тех пор, пока не закончится терминальным символом.

Главное различие между выбором и деревом разбора в том, что дерево разбора не фиксирует порядка, в котором были сделаны некоторые шаги выводов. Выводы, соответствующие одному дереву разбора, считаются эквивалентными.

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

Пример: < выражение > => < выражение > + < выражение > * < выражение >

< выражение >

< выражение > + < выражение >

< выражение > * < выражение >

или

< выражение >

< выражение > * < выражение >

< выражение > + < выражение >

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

Можно написать однозначную грамматику, в которой говорится, что умножение имеет приоритет над сложением (кроме того случая, когда для преодоления приоритет используются скобки). Для этого вводятся нетерминальные символы <слагаемое> и <множитель>:

<выражение>::=<слагаемое> | <выражение> + <слагаемое> | <выражение>- <слагаемое>

<слагаемое>::=<множитель> | <слагаемое>*<множитель>

<множитель>::== < константа > | (< выражение >)

< константа > :: = < константа > < цифра >

< цифра > :: = 0 |1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Также для БНФ вводятся фигурные скобки ‘{…}’ для облегчения понимания и записи.

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