- •Часть 1
- •Строка символов: определение, основные операции обработки
- •Язык: определение, основные элементы, способы задания
- •Грамматика языка: определение, способы задания
- •Графический язык
- •Классификация языков и грамматик
- •Понятие вывода в языке, виды вывода, дерево вывода
- •Распознаватели: определение, основные операции, классификация
- •Конечные автоматы
- •Основные фазы компиляции программы. Фазы компиляции
- •Лексический анализ: основные операции, виды лексем, способы реализации таблиц лексем
- •Синтаксический анализ: назначение, основные операции
- •Нисходящий распознаватель с подбором альтернатив
Часть 1
Строка символов: определение, основные операции обработки
Строка (цепочка) символов – произвольная последовательность символов, записанных один за другим.
Две цепочки α и β равны между собой, если они состоят из одних и тех же символов, находящихся в одной и той же последовательности.
|α| - длина цепочки
n = |α|
α = β => |α| = |β|
Конкатенация: α + β = αβ
αβ ≠ βα
Операция называется заменой или подстановкой, если какая-то цепочка разбивается на составляющие подцепочки, а затем одна подцепочек заменяется любой произвольной цепочкой символов.
Пустая цепочка: |λ| = 0
αλ = λα
Язык: определение, основные элементы, способы задания
Язык – это заданный набор символов (алфавит) и правил, устанавливающих способы комбинирования этих символов для записи осмысленных текстов (синтаксис).
Алфавит – счетное множество допустимых символов.
α(V) – цепочка над алфавитом V (составленная из символов алфавита V)
V+ – множество всех цепочек, составленных на основании алфавита V и не включающих пустой символ.
V* – множество, включающее пустой символ (V* = V+∪λ)
Язык – это некоторое счетное подмножество цепочек конечной длины из множества всех цепочек над алфавитом V.
L(V) ⊆ V*
Способы задания языка:
Перечисление всех допустимых цепочек языка
Задание метода порождения правильных цепочек
Определение метода распознавания правильных цепочек
Первый метод на практике не применяется.
Второй метод – правила создания правильных цепочек.
Третий метод реализуется в трансляторах.
Для того чтобы реализовать третий способ, надо формально описать язык:
Описание алфавита
Лексика – словарный запас языка
Синтаксис – набор правил, определяющих допустимые конструкции языка
Семантика – раздел языка, определяющий значение частей предложений языка (система правил истолкования отдельных языковых конструкций)
Синтаксически правильная программа имеет смысл, если можно:
изложить ее на другом языке программирования
описать ее на естественном языке в виде комментария
представить алгоритм в виде блок-схемы
выполнить на машине Тьюринга
Грамматика языка: определение, способы задания
Грамматика – это описание способа построения предложений некоторого языка. Задание грамматики – это задание правил порождения цепочек символов, принадлежащих языку.
Продукция – это упорядоченная пара цепочек, которая записывается: α→β (α::=β) и расшифровывается: «α порождает β» или «β по определению есть α»
Любая грамматика включает:
Описание синтаксических конструкций языка
Определение семантических ограничений
Описание синтаксиса:
Форма Бэкуса-Наура.
G = (VT, VN, P, S)
VT – множество терминальных символов (алфавит)
VN – множество нетерминальных символов (VN∩VT = ∅). Используются для промежуточных шагов при построении дерева разбора.
P – множество продукций грамматики: P = {α→β}, α∈V+, β∈V*
S – целевой символ грамматики: S∈VN. Является корневым символом при создании дерева разбора.
V = VN∪VT – полный алфавит грамматики
Терминальные символы могут встречаться и в левой, и в правой части продукции α→β, но если они стоят в левой части, то должны дублироваться в правой. Нетерминальные символы обязательно встречаются
Если есть набор α→β1, α→β2, …, α→βn, то α→β1|β2|…|βn
G = ({0,1,2,3,4,5,6,7,8,9,+,-}, {<число>, <знак>, <цифра>, <числовая константа (ЧК)>}, P, <число>)
P:
<число>→<ЧК>|<знак><ЧК>
<знак>→+|-
<ЧК>→<цифра>|<ЧК><цифра>
<цифра>→0|1|2|3|4|5|6|7|8|9
(необязательно) Повторения бывают двух видов:
Итерация
Рекурсия – бесконечное множество возможных цепочек языка. Может быть явной, когда нетерминальный символ определяется через себя в одном правиле, и неявной.
Язык метасимволов.
{} – бесконечное число повторений
{}16, {}0∞ – диапазон
[] – необязательный элемент
( , , ) – исключающее «или»
P:
<число>→[(+,-)]<цифра>{<цифра>}
<цифра>→(0,1,2,3,4,5,6,7,8,9)
Или:
<число>→[<знак>]<цифра>{<цифра>}
<знак>→(+,-)