Т-грамматика с подпрограммами
Рассмотрим Т-грамматику для условных операторов. Грамматика описывает перевод сокращенных и полных условных операторов в ПОЛИЗ, например оператора вида if A then В else С; в ПОЛИЗ вида А т1УПЛ В m2БП m1:С т2, где А — логическое выражение, Z и С — любые операторы, в том числе и условные. Ясно, что элементы А, В и С в ПОЛИЗ оператора также будут записаны в ПОЛИЗ.
Представим грамматику G = (VT, Vn,P, S) условного оператора некоторого языка программирования правилами (табл. 4.2). Это входная грамматика, в которой VT= {if then, else, z, p, ;}, VN= {U,K,H,M,O}, S = U- аксиома. Для обозримости иллюстраций полагаем, что логическое выражение р и не условный оператор z описываются в других грамматиках и считаются уже разобранными синтаксическими конструкциями. Поэтому они включены в множество терминалов VN.
Таблица 5.1 Правила грамматики условного оператора
Номер правила | Входная грамматика G | Транслирующая грамматика GT |
U->if K | U->if K | |
К->рН | K->p[xo]H | |
Н -> then О М; | H->then[x1]O M [x3]; | |
М -> else О | М -> else [X2] О | |
M-> | М -> | |
O->U | O->U | |
0->z | O->z [x0] |
Теперь запишем Т-грамматику, пополнив входную грамматику операционными символами. Операционные символы подберем, исходя из сравнения форм исходных операторов и соответствующих им форм ПОЛИЗ. Возможный вариант правил R для Т-грамматики GT = (VT, VN, , Р, S) показан в табл. 5.2.1. В этой грамматике = {[х0], [х1], [х2], [х3]}, a VT, VN и U имеют тот же смысл, что и во входной грамматике. Операционные символы по сути своей являются подпрограммами, которые выполняются в темпе синтаксического анализа и осуществляют следующие действия:
- [x0] - копирует текущий входной символ (терминал) в выходную строку;
- [x1] - создает очередную метку mj, дописывает в выходную строку цепочку mj УПЛ и помещает mj. в вершину стека меток;
- [x2] - создает очередную метку mj+1, дописывает в выходную строку цепочку mj+1БПmj:, где тj— метка в вершине стека меток, и замещает в стеке метку mi: меткой mj+1:;
- [х3] - выталкивает метку тk из вершины стека меток в выходную строку.
Транслирующая грамматика GT описывает активные цепочки. Так, входному оператору if a then b else с; будет соответствовать активная цепочка if a [x0] then[x1] b[x0] else[x2] c[x0] [x3].
Дата добавления: 2016-03-27; просмотров: 529;