- •2.1. Входная грамматика в структурированной форме
- •2.2. Су-схема и транслирующая грамматика
- •2.3. Функции переходов преобразователя
- •3.1. Грамматика лексических единиц и структура лексем
- •3.2. Диаграмма состояний лексического анализатора
- •3.3. Структуры данных и символы действия
- •4.1. Неформальное описание семантики
- •4.2. Атрибутная грамматика
- •4.3. Описание символов действия
- •4.4. Пример вывода в атрибутной грамматике.
- •5.1. Построение функций переходов атрибутного преобразователя.
- •5.2. Построение инструкций атрибутного преобразователя.
2.3. Функции переходов преобразователя
Для всех правил вида <A>b, где bVтвх и(VтвхUVтвыхUVa)*, строим функции вида:
f(S,b,A)=(S,’, $), где’-зеркальное отражение цепочки.
( S, a, <bukva> ) = ( S, #a#, $ )
( S, b, <bukva> ) = ( S, #b#, $ )
( S, c, <bukva> ) = ( S, #c#, $ )
( S, d, <bukva> ) = ( S, #d#, $ )
( S, e, <bukva> ) = ( S, #e#, $ )
( S, 0, <zifra> ) = ( S, #0#, $ )
( S, 1, <zifra> ) = ( S, #1#, $ )
( S, 2, <zifra> ) = ( S, #2#, $ )
( S, 3, <zifra> ) = ( S, #3#, $ )
( S, 4, <zifra> ) = ( S, #4#, $ )
( S, 5, <zifra> ) = ( S, #5#, $ )
( S, 6, <zifra> ) = ( S, #6#, $ )
( S, 7, <zifra> ) = ( S, #7#, $ )
( S, 8, <zifra> ) = ( S, #8#, $ )
( S, 9, <zifra> ) = ( S, #9#, $ )
( S, "'true'" , <const> ) = ( S, #'true'#, $ )
( S, "'false'" , <const> ) = ( S, #'false'#, $ )
( S, "'a'" , <simvol> ) = ( S, #'a'#, $ )
( S, "'b'" , <simvol> ) = ( S, #'b'#, $ )
( S, "'c'" , <simvol> ) = ( S, #'c'#, $ )
( S, "'d'" , <simvol> ) = ( S, #'d'#, $ )
( S, "'e'" , <simvol> ) = ( S, #'e'#, $ )
( S, "<arr>" , <masbool> ) = ( S, #RM## #"</arr>"<chislo># ##bool## #","<id>, $ )
( S, "<arr>" , <maschar> ) = ( S, #RM## #"</arr>"<chislo># ##char## #","<id>, $ )
( S, "<earr>" , <elmas> ) = ( S, #EM## #"</earr>"<chislo># #","<id>, $ )
( S, "<boolean>" , <vars> ) = ( S, <r3> "</boolean>" <namesbool>, $ )
( S, "<char>" , <vars> ) = ( S, <r3> "</char>" <nameschar>, $ )
( S, "," , <r4> ) = ( S, <namesbool># #, $ )
( S, "," , <r5> ) = ( S, <nameschar># #, $ )
( S, "<ass>", <code> ) = ( S,<r6>#=#"</ass>"<vyrazh># #","<perem> , $ )
( S, "<and>", <operation> ) = ( S, #&# "</and>" <operand> # # "," <operand>, $ )
( S, "<or>" , <operation> ) = ( S, #V# "</or>" <operand> # # "," <operand>, $ )
( S, "<not>", <operation> ) = ( S, #!# "</not>" <operand>, $ )
Для всех правил вида <A><B>, где BVa и(VтвхUVтвыхUVa)*, строим функции вида:f*(S,x, <A>)=(S,<B>, $) для всехxВЫБОР(<A><B>вх),
где вх-цепочка, по-лученная изпутем удаления из нее всех выходных символов.
*( S, "<boolean>" , <i> ) = ( S, <code> # # <vars>, $ )
*( S, "<char>" , <i> ) = ( S, <code> # # <vars>, $ )
*( S, a, <id> ) = ( S, <R1> <bukva>, $ )
*( S, b, <id> ) = ( S, <R1> <bukva>, $ )
*( S, c, <id> ) = ( S, <R1> <bukva>, $ )
*( S, d, <id> ) = ( S, <R1> <bukva>, $ )
*( S, e, <id> ) = ( S, <R1> <bukva>, $ )
*( S, a, <R1> ) = ( S, <R1> <bukva>, $ )
*( S, b, <R1> ) = ( S, <R1> <bukva>, $ )
*( S, c, <R1> ) = ( S, <R1> <bukva>, $ )
*( S, d, <R1> ) = ( S, <R1> <bukva>, $ )
*( S, e, <R1> ) = ( S, <R1> <bukva>, $ )
*( S, 0, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 1, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 2, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 3, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 4, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 5, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 6, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 7, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 8, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 9, <R1> ) = ( S, <R1> <zifra>, $ )
*( S, 0, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 1, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 2, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 3, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 4, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 5, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 6, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 7, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 8, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 9, <chislo> ) = ( S, <R2> <zifra>, $ )
*( S, 0, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 1, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 2, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 3, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 4, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 5, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 6, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 7, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 8, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, 9, <R2> ) = ( S, <R2> <zifra>, $ )
*( S, "<boolean>" , <R3> ) = ( S, <vars> # #, $ )
*( S, "<char>" , <R3> ) = ( S, <vars> # #, $ )
*( S, a, <namesbool> ) = ( S, <R4> #bool# # # <id>, $ )
*( S, b, <namesbool> ) = ( S, <R4> #bool# # # <id>, $ )
*( S, c, <namesbool> ) = ( S, <R4> #bool# # # <id>, $ )
*( S, d, <namesbool> ) = ( S, <R4> #bool# # # <id>, $ )
*( S, e, <namesbool> ) = ( S, <R4> #bool# # # <id>, $ )
*( S, "<arr>" , <namesbool> ) = ( S, <R4> <masbool>, $ )
*( S, a, <nameschar> ) = ( S, <R5> #char# # # <id>, $ )
*( S, b, <nameschar> ) = ( S, <R5> #char# # # <id>, $ )
*( S, c, <nameschar> ) = ( S, <R5> #char# # # <id>, $ )
*( S, d, <nameschar> ) = ( S, <R5> #char# # # <id>, $ )
*( S, e, <nameschar> ) = ( S, <R5> #char# # # <id>, $ )
*( S, "<arr>" , <nameschar> ) = ( S, <R5> <maschar>, $ )
*( S, a, <perem> ) = ( S, <id>, $ )
*( S, b, <perem> ) = ( S, <id>, $ )
*( S, c, <perem> ) = ( S, <id>, $ )
*( S, d, <perem> ) = ( S, <id>, $ )
*( S, e, <perem> ) = ( S, <id>, $ )
*( S, "<earr>" , <perem> ) = ( S, <elmas>, $ )
*( S, "'true'" , <vyrazh> ) = ( S, <const>, $ )
*( S, "'false'" , <vyrazh> ) = ( S, <const>, $ )
*( S, "'a'" , <vyrazh> ) = ( S, <simvol>, $ )
*( S, "'b'" , <vyrazh> ) = ( S, <simvol>, $ )
*( S, "'c'" , <vyrazh> ) = ( S, <simvol>, $ )
*( S, "'d'" , <vyrazh> ) = ( S, <simvol>, $ )
*( S, "'e'" , <vyrazh> ) = ( S, <simvol>, $ )
*( S, a, <vyrazh> ) = ( S, <perem>, $ )
*( S, b, <vyrazh> ) = ( S, <perem>, $ )
*( S, c, <vyrazh> ) = ( S, <perem>, $ )
*( S, d, <vyrazh> ) = ( S, <perem>, $ )
*( S, e, <vyrazh> ) = ( S, <perem>, $ )
*( S, "<earr>" , <vyrazh> ) = ( S, <perem>, $ )
*( S, "<and>" , <vyrazh> ) = ( S, <operation>, $ )
*( S, "<or>" , <vyrazh> ) = ( S, <operation>, $ )
*( S, "<not>" , <vyrazh> ) = ( S, <operation>, $ )
*( S, "<and>" , <operand> ) = ( S, <operation>, $ )
*( S, "<or>" , <operand> ) = ( S, <operation>, $ )
*( S, "<not>" , <operand> ) = ( S, <operation>, $ )
*( S, a, <operand> ) = ( S, <perem>, $ )
*( S, b, <operand> ) = ( S, <perem>, $ )
*( S, c, <operand> ) = ( S, <perem>, $ )
*( S, d, <operand> ) = ( S, <perem>, $ )
*( S, e, <operand> ) = ( S, <perem>, $ )
*( S, "<earr>" , <operand> ) = ( S, <perem>, $ )
*( S, "'true'" , <operand> ) = ( S, <const>, $ )
*( S, "'false'" , <operand> ) = ( S, <const>, $ )
*( S, "<ass>" , <R6> ) = ( S, <code> # #, $ )
Для всех правил вида <A>$ строим функции вида:
f*( S, x, <A>) = ( s0, $, $ ), для всехxВЫБОР(<A>$), правило <A>$ принадлежит Гвх.
*( S, "," , <R1> ) = ( S, $, $)
*( S, "</boolean>" , <R1> ) = ( S, $, $)
*( S, "</char>" , <R1> ) = ( S, $, $ )
*( S, "</ass>" , <R1> ) = ( S, $, $ )
*( S, "</and>" , <R1> ) = ( S, $, $ )
*( S, "</or>" , <R1> ) = ( S, $, $ )
*( S, "</not>" , <R1> ) = ( S, $, $ )
*( S, "</arr>" , <R2> ) = ( S, $, $ )
*( S, "</earr>" , <R2> ) = ( S, $, $ )
*( S, "<ass>" , <R3> ) = ( S, $, $ )
*( S, "</boolean>" , <R4> ) = ( S, $, $ )
*( S, "</char>" , <R5> ) = ( S, $, $ )
*( S, -|, <R6> ) = ( S, $, $ )
Для каждого bVтвх, не стоящего на первом месте в правой части правил транслирующей грамматики, строим функции вида:f( S, b, b) = ( S, $, $).
( S, "," , "," ) = ( S, $, $ )
( S, "</arr>" , "</arr>" ) = ( S, $, $ )
( S, "</earr>" , "</earr>" ) = ( S, $, $ )
( S, "</boolean>" , "</boolean>" ) = ( S, $, $ )
( S, "</char>" , "</char>" ) = ( S, $, $ )
( S, "</ass>" , "</ass>" ) = ( S, $, $ )
( S, "</and>" , "</and>" ) = ( S, $, $ )
( S, "</or>" , "</or>" ) = ( S, $, $ )
( S, "</not>" , "</not>" ) = ( S, $, $ )
Для каждого wVтвых, записываемого в магазин, строим функции вида:
f*( S, $, w) = ( S, $, w).
*( S, $, #bool#) = (S, $, #bool# )
*( S, $, #char#) = (S, $, #char# )
*( S, $, #a#) = (S, $, #a# )
*( S, $, #b#) = (S, $, #b# )
*( S, $, #c#) = (S, $, #c# )
*( S, $, #d#) = (S, $, #d# )
*( S, $, #e#) = (S, $, #e# )
*( S, $, #0#) = (S, $, #0# )
*( S, $, #1#) = (S, $, #1# )
*( S, $, #2#) = (S, $, #2# )
*( S, $, #3#) = (S, $, #3# )
*( S, $, #4#) = (S, $, #4# )
*( S, $, #5#) = (S, $, #5# )
*( S, $, #6#) = (S, $, #6# )
*( S, $, #7#) = (S, $, #7# )
*( S, $, #8#) = (S, $, #8# )
*( S, $, #9#) = (S, $, #9# )
*( S, $, # #) = (S, $, # # )
*( S, $, #RM#) = (S, $, #RM# )
*( S, $, #EM#) = (S, $, #EM# )
*( S, $, #=#) = (S, $, #=# )
*( S, $, #&#) = (S, $, #&# )
*( S, $, #V#) = (S, $, #V# )
*( S, $, #!#) = (S, $, #!# )
*( S, $, #'true'#) = (S, $, #'true'# )
*( S, $, #'false'#) = (S, $, #'false'# )
*( S, $, #'a'#) = (S, $, #'a'# )
*( S, $, #'b'#) = (S, $, #'b'# )
*( S, $, #'c'#) = (S, $, #'c'# )
*( S, $, #'d'#) = (S, $, #'d'# )
*( S, $, #'e'#) = (S, $, #'e'# )
Строим функцию перехода в заключительное состояние:
( S, -|, [] ) = (S, $, $ )
Пример работы магазинного преобразователя:
Подадим на вход цепочку:
<boolean>b1</boolean><ass>b1’,’<not>’false’</not></ass>
На выходе магазинного преобразователя получим цепочку:
b1 bool b1 ’false’ ! =
ТАКТ 0
состояние S
входная цепочка "<boolean>" b1 "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"
магазин <I>[]
выходная цепочка
функция перехода *(S,"<BOOLEAN>",<I>)=(S,<CODE># #<VARS>,$)
ТАКТ 1
состояние S
входная цепочка "<boolean>" b1 "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"
магазин <VARS># #<CODE>[]
выходная цепочка
функция перехода (S,"<BOOLEAN>",<VARS>)=(S,<R3>"</BOOLEAN>"<NAMESBOOL>,$)
ТАКТ 2
состояние S
входная цепочка b1 "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <NAMESBOOL>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка
функция перехода *(S,B,<NAMESBOOL>)=(S,<R4>#BOOL## #<ID>,$)
ТАКТ 3
состояние S
входная цепочка b1 "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <ID># ##BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка
функция перехода *(S,B,<ID>)=(S,<R1><BUKVA>,$)
ТАКТ 4
состояние S
входная цепочка b1 "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <BUKVA><R1># ##BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка
функция перехода (S,B,<BUKVA>)=(S,#B#,$)
ТАКТ 5
состояние S
входная цепочка 1 "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин #B#<R1># ##BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка
функция перехода *(S,$,#B#)=(S,$,#B#)
ТАКТ 6
состояние S
входная цепочка 1 "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <R1># ##BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка B
функция перехода *(S,1,<R1>)=(S,<R1><ZIFRA>,$)
ТАКТ 7
состояние S
входная цепочка 1 "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <ZIFRA><R1># ##BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка B
функция перехода (S,1,<ZIFRA>)=(S,#1#,$)
ТАКТ 8
состояние S
входная цепочка "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин #1#<R1># ##BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка B
функция перехода *(S,$,#1#)=(S,$,#1#)
ТАКТ 9
состояние S
входная цепочка "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <R1># ##BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка B1
функция перехода *(S,"</BOOLEAN>",<R1>)=(S,$,$)
ТАКТ 10
состояние S
входная цепочка "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин # ##BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка B1
функция перехода *(S,$,# #)=(S,$,# #)
ТАКТ 11
состояние S
входная цепочка "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин #BOOL#<R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка B1"" ""
функция перехода *(S,$,#BOOL#)=(S,$,#BOOL#)
ТАКТ 12
состояние S
входная цепочка "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <R4>"</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка B1"" """BOOL"
функция перехода *(S,"</BOOLEAN>",<R4>)=(S,$,$)
ТАКТ 13
состояние S
входная цепочка "</boolean>""<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин "</BOOLEAN>"<R3># #<CODE>[]
выходная цепочка B1"" """BOOL"
функция перехода (S,"</BOOLEAN>","</BOOLEAN>")=(S,$,$)
ТАКТ 14
состояние S
входная цепочка "<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <R3># #<CODE>[]
выходная цепочка B1"" """BOOL"
функция перехода *(S,"<ASS>",<R3>)=(S,$,$)
ТАКТ 15
состояние S
входная цепочка "<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин # #<CODE>[]
выходная цепочка B1"" """BOOL"
функция перехода *(S,$,# #)=(S,$,# #)
ТАКТ 16
состояние S
входная цепочка "<ass>" b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <CODE>[]
выходная цепочка B1"" """BOOL""" ""
функция перехода (S,"<ASS>",<CODE>)=(S,<R6>#=#"</ASS>"<VYRAZH># #","<PEREM>,$)
ТАКТ 17
состояние S
входная цепочка b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <PEREM>","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""
функция перехода *(S,B,<PEREM>)=(S,<ID>,$)
ТАКТ 18
состояние S
входная цепочка b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <ID>","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""
функция перехода *(S,B,<ID>)=(S,<R1><BUKVA>,$)
ТАКТ 19
состояние S
входная цепочка b1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <BUKVA><R1>","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""
функция перехода (S,B,<BUKVA>)=(S,#B#,$)
ТАКТ 20
состояние S
входная цепочка 1, "<not>" "'false'" "</not>" "</ass>"-|
магазин #B#<R1>","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""
функция перехода *(S,$,#B#)=(S,$,#B#)
ТАКТ 21
состояние S
входная цепочка 1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <R1>","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B
функция перехода *(S,1,<R1>)=(S,<R1><ZIFRA>,$)
ТАКТ 22
состояние S
входная цепочка 1, "<not>" "'false'" "</not>" "</ass>"-|
магазин <ZIFRA><R1>","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B
функция перехода (S,1,<ZIFRA>)=(S,#1#,$)
ТАКТ 23
состояние S
входная цепочка , "<not>" "'false'" "</not>" "</ass>"-|
магазин #1#<R1>","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B
функция перехода *(S,$,#1#)=(S,$,#1#)
ТАКТ 24
состояние S
входная цепочка , "<not>" "'false'" "</not>" "</ass>"-|
магазин <R1>","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1
функция перехода *(S,",",<R1>)=(S,$,$)
ТАКТ 25
состояние S
входная цепочка , "<not>" "'false'" "</not>" "</ass>"-|
магазин ","# #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1
функция перехода (S,",",",")=(S,$,$)
ТАКТ 26
состояние S
входная цепочка "<not>" "'false'" "</not>" "</ass>"-|
магазин # #<VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1
функция перехода *(S,$,# #)=(S,$,# #)
ТАКТ 27
состояние S
входная цепочка "<not>" "'false'" "</not>" "</ass>"-|
магазин <VYRAZH>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" ""
функция перехода *(S,"<NOT>",<VYRAZH>)=(S,<OPERATION>,$)
ТАКТ 28
состояние S
входная цепочка "<not>" "'false'" "</not>" "</ass>"-|
магазин <OPERATION>"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" ""
функция перехода (S,"<NOT>",<OPERATION>)=(S,#!#"</NOT>"<OPERAND>,$)
ТАКТ 29
состояние S
входная цепочка "'false'" "</not>" "</ass>"-|
магазин <OPERAND>"</NOT>"#!#"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" ""
функция перехода *(S,"'FALSE'",<OPERAND>)=(S,<CONST>,$)
ТАКТ 30
состояние S
входная цепочка "'false'" "</not>" "</ass>"-|
магазин <CONST>"</NOT>"#!#"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" ""
функция перехода (S,"'FALSE'",<CONST>)=(S,#'FALSE'#,$)
ТАКТ 31
состояние S
входная цепочка "</not>" "</ass>"-|
магазин #'FALSE'#"</NOT>"#!#"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" ""
функция перехода *(S,$,#'FALSE'#)=(S,$,#'FALSE'#)
ТАКТ 32
состояние S
входная цепочка "</not>" "</ass>"-|
магазин "</NOT>"#!#"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" """'FALSE'"
функция перехода (S,"</NOT>","</NOT>")=(S,$,$)
ТАКТ 33
состояние S
входная цепочка "</ass>"-|
магазин #!#"</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" """'FALSE'"
функция перехода *(S,$,#!#)=(S,$,#!#)
ТАКТ 34
состояние S
входная цепочка "</ass>"-|
магазин "</ASS>"#=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" """'FALSE'"!
функция перехода (S,"</ASS>","</ASS>")=(S,$,$)
ТАКТ 35
состояние S
входная цепочка -|
магазин #=#<R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" """'FALSE'"!
функция перехода *(S,$,#=#)=(S,$,#=#)
ТАКТ 36
состояние S
входная цепочка -|
магазин <R6>[]
выходная цепочка B1"" """BOOL""" ""B1"" """'FALSE'"!=
функция перехода *(S,-|,<R6>)=(S,$,$)
ТАКТ 37
состояние S
входная цепочка -|
магазин []
выходная цепочка B1"" """BOOL""" ""B1"" """'FALSE'"!=
функция перехода (S,-|,[])=(S,$,$)
ТАКТ 38
состояние S
входная цепочка -|
магазин []
выходная цепочка B1"" """BOOL""" ""B1"" """'FALSE'"!=
Магазинный автомат успешно завершил работу
Лексический анализатор