
- •2006 Печатается по решению научно-методического совета Иркутского Государственного университета
- •Оглавление
- •Введение
- •Содержание и задачи практикума
- •2. Ll(1)-грамматики и автоматные синтаксические анализаторы
- •2.1. Кс-грамматики. Дерево синтаксического разбора
- •2.2. Множества направляющих символов.Ll(1)-грамматики
- •2.3. Автоматный синтаксический анализатор
- •Правила построения функции переходов:
- •3. Преобразование дерева синтаксического разбора в дерево синтаксической структуры.
- •4. Технология и средства решения учебных задач
- •4.1. Компонент pdmUnit
- •4.2. Класс cNode
- •4.3. Учебные транслирующие программы
- •5.Пример диалоговой настройки и испытаний компонента pdmUnit
- •6. Пример программы компиляции и интерпретации одной разновидности арифметических выражений
- •Заключение
- •Использованные источники
2.1. Кс-грамматики. Дерево синтаксического разбора
Обозначим V – конечное множество символов, V+ - множество непустых цепочек символов из V, V* - множество все возможных цепочек (включая цепочку нулевой длины) из V.
Определение. Грамматика G = <N, T, P, S>, где N, T – множества нетерминальных и терминальных символов соответственно (NT=), P – множество правил вида A-> (AN, (NT)*), S - аксиома (SN), называется КС-грамматикой.
Пример КС-грамматики.
G=<N, T, P, S>, где
N={A,B,C,D,E}
T={+,*,(,),i}
S=A
P={ 1. A->CB
2. B->+CB
3. B->
4. C->ED
5. D->*ED
6.D->
7. E->(A)
8. E->i}
Выводом цепочки n в грамматике G называется последовательность цепочек 1=>…=>i-1 =>i=>…=>n, если [3, с.77]:
1, …i-1, …, n (NT)*,
1=S,
i=2, …, n цепочка i получена из цепочки i-1 заменой одного нетерминального символа A цепочкой согласно правила грамматики A->
Для цепочки i+i*i+i выводом в грамматике G является последовательность цепочек2
A=>1CB=>4EDB=>8iDB=>6iB=>2i+CB=>4i+EDB=>8i+iDB=>5i+i*EDB=>8i+i*iDB=>6=>i+i*iB=>2i+i*i+CB=>4i+i*i+EDB=>8i+i*i+iDB=>6 i+i*i+iB=>3 i+i*i+i
Вывод цепочки часто описывают деревом синтаксического разбора. Одно и тоже дерево синтаксического разбора может соответствовать различным выводам цепочки.
Деревом синтаксического разбора (ДСР) цепочки =1, …, m в KC-грамматике G называется дерево, у которого:
Корень дерева помечен символом S.
Терминальные узлы дерева помечены символами 1, …, m , .
Промежуточные узлы дерева помечены нетерминальными символами грамматики 1, …, m N.
Для всякого нетерминального узла A дерева синтаксического разбора, непосредственно связанного с узлами 1, …, n, в грамматике G имеет место правило A -> 1…n.
ДСР цепочки i+i*i+i в грамматике G представлено на рис.1.
Упражнение. Сопоставьте каждому элементу вывода цепочки i+i*i+i в грамматике G элементы ДСР.
Рис. 1. Дерево синтаксического разбора цепочки i+i*i+i. Верхний индекс в метке нетерминального узла – номер правила грамматики
2.2. Множества направляющих символов.Ll(1)-грамматики
Множество направляющих символов DS(P->) правила P-> КС-грамматики G определим как DS(P->)=S()F(P), где S()={a| a T, (NT)+, =>*a, (NT)*}3, а F(P)={a| a T{#}, =>*, S#=>* xPay; S – аксиома КС-грамматики, P N; x,y (NT)*} [3, c.104]. Таким образом, множество направляющих символов правила грамматики это символы входной строки, при обработке которых можно применить данное правило.
Построим множества направляющих символов для правил грамматики G:
DS(A->CB) = {(, i }
DS(B->+CB) = { + }
DS(B->) = {#, )}
DS(C->ED) = {(, i}
DS(D->*ED)={*}
DS(D->) = {+, #, )}
DS(E->(A)) = { ( }
DS(E->i) = { i }
LL(1)-грамматикой называется такая КС-грамматика G=<N, T, P, S>, у которой:
Нет подмножеств правил вида A->A11, …, An-1->A n n, A n->A, где A, A1, …, An N, 1, …, n (NT)*
xNT S=>*x P, где , (NT)*
p1, p2 | p1, p2 P, p1=A->, p2=A-> DS(A->)DS(A->)=
Приведенная выше КС-грамматика G является LL(1)-грамматикой.
LL(1)-грамматики используют в качестве моделей синтаксиса языков программирования. Свойства LL(1)-грамматики позволяют строить из нее автоматный синтаксический анализатор, обеспечивающий контроль принадлежности входной цепочки языку, заданному этой грамматикой.