2016-12-03 03 Евгений Тюменцев. dsl на коленке
TRANSCRIPT
Определение 1. (Алфавит)
Алфавит – произвольное непустое конечное множество символов.
A = {𝑎𝑖| 𝑖 = 1,2, … , 𝑛}.
Определение 2. (Слово в алфавите)
𝑎1𝑎2 … 𝑎𝑛
Словом в алфавите A называется конечная цепочка (в том числе, пустая)
записанных подряд символов этого алфавита
Определение 3. (Конкатенация)
Конкатенацией слов α и β называется слово αβ, получающееся
приписыванием слова β к слову α.
Определение 4. (Формальный язык)
Множество всех слов в алфавите A обозначается через 𝐴∗ (пустое слово
принадлежит 𝐴∗).
Формальным языком (или просто языком) в алфавите A называется какое
угодно подмножество множества 𝐴∗.
Пример 5. (язык С++)
Алфавит: do, while, if, {, }, (, ), +, -, …
Слово:
void f(int a, int b)
{
return a + b;
}
Определение 6. (Исчисление)
Пусть A - произвольный алфавит, а L - некоторый язык в алфавите A.
Тогда говорят, что задано исчисление C, если задано
1. множество Ax слов языка L,
2. конечное множество R не менее, чем двухместных отношений на L.
Каждое слово из множества Ax называется аксиомой исчисления C, а каждое
отношение из R - правилом вывода исчисления C.
Определение 7. (n+1-местное отношение)
Пусть r ∈ R - (n+1)-местное правило вывода, где n - положительное целое
число. Тогда, если (𝑎1, 𝑎2, … , 𝑎𝑛, 𝑎) ∈ r, то говорят, что 𝑎 получается из
𝑎1, 𝑎2, … , 𝑎𝑛 по правилу вывода r.
𝑎1, 𝑎2, … , 𝑎𝑛
𝑎
Определение 8. (Выводимость)
Пусть D – множество формул, B – формула.
Тогда D ⊦ B, если ∃ B1, B2, …, Bn , что
1.Bn – это B,
2.Bi – это
либо формула из L,
либо аксиома,
либо формула полученная при
помощи правила вывода
Определение 9. (Грамматика)
Формальная грамматика — четверка
T — множество терминальных символов (термов);
N — множество нетерминальных символов;
S — начальный символ;
P — набор правил вывода (продукций).
Теорема 10.
1. Для любой формальной грамматики существует машина Тьюринга,
распознающая язык этой грамматики.
2. Если язык распознается некоторой машиной Тьюринга, то существует
формальная грамматика, которая его генерирует.
Пример 12. Вывод (()(()))
2 2 2 2 3 3
S=>(S)S=>(()S)S=>(()(S)S)S => (()((S)S)S)S => (()(()S)S)S => (()(())S)S
3 3
=> (()(()))S => (()(()))
Практическое применение
На практике используются КС-грамматики
Регулярные – слишком узкий класс {0𝑛1𝑚|𝑛, 𝑚 ∈ ℕ}
КЗ и неограниченные – слишком трудоемкие
Определение 16. Множество First
Для каждого нетерминала A вычисляется First(A):
• если в грамматике есть правило с A в левой части и правой частью,
начинающейся с терминала, то данный терминал входит в First(A)
• если в грамматике есть правило с A в левой части и правой частью,
начинающейся с нетерминала (обозначим B), то First(B) строго входит в
First(A)
• никакие иные терминалы не входят в First(A)
Определение 17. Множество направляющих
символов
если правая часть правила начинается с терминала, то множество
направляющих символов состоит из одного этого терминала
иначе правая часть начинается с нетерминала A, тогда множество
направляющих символов есть First(A)
Определение 18. LL(1)-грамматика
для любой пары правил с одинаковой левой частью множества
направляющих символов не пересекаются.
Таблица разбора
Номер Напр. символы Следующий Accept
Stack Return Error
1 ( 3 0 0 0 0
2 -|, ) 7 0 0 0 1
3 ( 4 1 0 0 1
4 (, -|, ) 1 0 1 0 1
5 ) 6 1 0 0 1
6 (, -|, ) 1 0 1 0 1
7 -|, ) - 0 0 1 1