Теория и реализация языков программирования



         

Атрибутная схема для алгоритма сопоставления образцов - часть 3


RULE Reg ::= '@' Reg SEMANTICS if (Match<0> содержит Reg в i-й позиции) Match<2>=<<'+' Reg Const>,Reg>; if (Match<0> содержит <'@' '+' Reg Const> в j-й позиции) добавить к Match<2> <'+' Reg Const> в k позиции; if (Match<0> содержит Reg в i-й позиции)

Pattern<0>[i]=Pattern<2>[1]|Pattern<2>[2]; if (Match<0> содержит <'@' '+' Reg Const> в j-й позиции) Pattern<0>[j]=Pattern<2>[k].

Образцы, соответствующие этому правилу, следующие:

(3) Reg

'@' '+' Reg Const, (7) Reg
'@' Reg.

Соответственно, атрибуту Match второго символа в качестве образцов при сопоставлении могут быть переданы <'+' Reg Const> (образец 3) или <Reg> (образец 7). Из анализа других правил можно заключить, что при сопоставлении образцов предков левой части данного правила атрибуту Match могут быть переданы образцы <'@' '+' Reg Const> (из образца 6) и Reg.

RULE Reg ::= Const SEMANTICS if (Pattern<0> содержит Const в j-й позиции) Pattern<0>[j]=true; if (Pattern<0> содержит Reg в i-й позиции) Pattern<0>[i]=true.

Для дерева рис. 9.24 получим значения атрибутов, приведенные на рис. 9.28. Здесь M обозначает Match, P - Pattern, C - Const, R - Reg.


Рис. 9.28. 




Содержание  Назад  Вперед