Т-грамматика с подпрограммами

Рассмотрим Т-грамматику для условных операторов. Граммати­ка описывает перевод сокращенных и полных условных операто­ров в ПОЛИЗ, например оператора вида 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БП m j:, где тj — метка в вершине стека меток, и замещает в стеке метку mi: меткой mj+1:;

- [х3] - выталкивает метку тk из вершины стека меток в выходную строку.

Транслирующая грамматика GT описывает активные цепоч­ки. Так, входному оператору if a then b else с; будет соответство­вать активная цепочка if a [x0] then[x1] b[x0] else[x2] c[x0] [x3].


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: