Синтаксично керована трансляція інфіксного запису арифметичних виразів в постфіксний

Для реалізації СКТ у даному випадку використаємо ПСА, додавши йому ще функції, що описані в у п. 6.1.

Нижче наведено трохи розширену, у порівнянні з п.5, граматику для арифметичних виразів і таблицю синтаксичного аналізу цієї граматики.

Граматика

1) E → TE’ 2) T → FT’ 3) E’ → є 4) E’ → PE’ 5) T’ → є 6) T’ → M

7) F → (E) 8) F → id 9) P → + 10) P → - 11) M → * 12) M → /

Таблиця предиктивного аналізатора

Нетер-мінал     Вхідний символ
id + - * / ( ) $
E ETE'         ETE'    
E'   E'PTE' E'PTE'       E'ε E'ε
T TFT'         TFT'    
T'   T'ε T'ε T'MFT' T'MFT'   T'ε T'ε
F F → id         F → (E)    
P   P → + P → -          
M       M → * M → /      
                     

Приклад 6.5. При вхідному потоці id1+id2*id3 предиктивний синтаксичний аналізатор здійснює послідовність переміщень, наведену у таблиці..

Стек Вхід Правило Постф Стек2
  $ E id1+id2*id3 $   іd1 $
  $ E'T id1+id2*id3 $ ETE' іd1 $
  $ E'T'F id1+id2*id3 $ TFT' іd1 $
  $ E'T' id id1+id2*id3 $ F → id іd1 $
  $ E'T' +id2*id3 $   іd1 $+
  $ E' + id2*id3$ T'ε іd1 $+
  $ E'TP + id2*id3 $ E'PTE' іd1 $ +
  $ E'T+ +id2*id3 $ P → + іd1 $ +
  $ E'T id2*id3 $   іd1 іd2 $ +
  $ E'T'F id2*id3 $ TFT' іd1 іd2 $ +
  $ E'T' id id2*id3 $ F → id іd1 іd2 $+
  $ E'T' *id3$   іd1 іd2 $ +*
  $ E'T'FM *id3$ T'M FT' іd1 іd2 $ +*
  $ E'T'F* *id3$ M → * іd1 іd2 $ +*
  $ E'T'F id3 $   іd1 іd2 іd3 $+ *
  $ E'T' id id3 $ F → id іd1 іd2 іd3 $ + *
  $ E'T' $   іd1 іd2 іd3 * $ +
  $ E' $ T'ε іd1 іd2 іd3 *+ $
  $ $ E'ε іd1 іd2 іd3 *+ $

Рис. Переміщення синтаксичного аналізатора при вхідному рядку id + id * id

Приклад 6. 6. Вираз в інфіксній формі id1*id2 +id3

Стек Вхід Правило Постф Стек2
  $ E id1*id2+id3 $   іd1 $
  $ E'T id1*id2+id3 $ ETE' іd1 $
  $ E'T'F id1*id2+id3 $ TFT' іd1 $
  $ E'T' id id1*id2+id3 $ F → id іd1 $
  $ E'T' *id2+id3 $   іd1 $*
  $ E'T'FM *id2+id3 $ M* іd1 $*
  $ E' T'F* *id2+id3 $ T' → * FT' іd1 $*
  $ E' T'F id2+id3 $   іd1 іd2 $*
  $ E' T' id id2+id3 $ F → id іd1 іd2 $*
  $ E' T' +id3 $   іd1 іd2 $*
  $ E' T' +id3 $   іd1 іd2 * $+
  $ E' +id3 $ T'ε іd1 іd2 * $+
  $ E'TP +id3 $ E’PTE’ іd1 іd2 * $+
  $ E'T + +id3 $ P → + іd1 іd2 *  
  $ E'T id3 $ TFT’ іd1 іd2 * іd3 $+
  $ E'T’F id3 $ F → id іd1 іd2 * іd3 $+
  $ E'T’ id id3 $   іd1 іd2 * іd3 $+
  $ E'T’ $   іd1 іd2 * іd3 $+
  $ E' $ T'ε іd1 іd2 * іd3 + $
  $ $ E'ε іd1 іd2 * іd3 + $

Приклад 6.7. При вхідному потоці (id+id)*id предиктивний синтаксичний аналізатор разом з СОТ здійснює послідовність переміщень, наведену у таблиці.

Стек Вхід Правило Постфікс Стек2
  $ E (id1+id2)*id3 $     $(
  $ E'T (id1+id2)*id3 $ ETE'   $(
  $ E'T'F (id1+id2)*id3 $ TFT'   $(
  $ E'T') Е ( (id1+id2)*id3 $ F → (E)   $(
  $ E'T') Е id1+id2)*id3 $   id1 $(
  $ E'T') E'T id1+id2)*id3 $ ETE' id1 $(
  $ E'T') E' T'F id1+id2)*id3 $ TFT' id1 $(
  $ E'T') E' T' id id1+id2)*id3 $ F → id id1 $(
  $ E'T') E' T' +id2)*id3 $ T'ε id1 $(+
  $ E'T') E' +id2)*id3 $   id1 $(+
  $ E'T') E'TP +id2)*id3 $ E'PTE' id1 $(+
  $ E'T') E'T + +id2)*id3 $ P → + id1 $(+
  $ E'T') E'T id2)*id3 $   id1 id2 $(+
  $ E'T') E' T'F id2)*id3 $ TFT' id1 id2 $(+
  $ E'T') E'T' id id2)*id3 $ F → id id1 id2 $(+
  $ E'T') E' T' )*id3 $   id1 id2 + $
  $ E'T') E' )*id3 $ T'ε id1 id2 + $
  $ E'T') )*id3 $ E'ε id1 id2 + $
  $ E'T' *id3 $   id1 id2+ $ *
  $ E'T'FM *id3 $ T'MFT' id1 id2+ $ *
  $ E'T'F * *id3 $ M → * id1 id2+ $ *
  $ E'T'F іd3 $   id1 id2+ іd3 $ *
  $ E'T' id іd3 $ F → id id1 id2+ $ *
  $ E'T' $   id1 id2+id3* $
  $ E' $ T'ε id1 id2+id3* $
  $ $ E'ε id1 id2+id3* $

Приклад 6.8. При вхідному потоці id-id-id предиктивний синтаксичний аналізатор разом з СОТ здійснює послідовність переміщень, наведену у таблиці.

Стек Вхід Правило Постф Стек2
  $ E id1- id2 - id3 $   іd1 $
  $ E'T id1- id2 - id3 $ ETE' іd1 $
  $ E'T'F id1- id2 - id3 $ TFT' іd1 $
  $ E'T' id id1- id2 - id3 $ F → id іd1 $
  $ E'T' - id2 - id3 $   іd1 $ -
  $ E' - id2 - id3 $ T'ε іd1 $ -
  $ E'TP - id2 - id3 $ E’PTE' іd1 $ -
  $ E'T - - id2 - id3 $ P → - іd1 $ -
  $ E'T id2 - id3 $   іd1 $ -
  $ E' T'F id2 - id3 $ TFT' іd1 $ -
  $ E' T'F id2 - id3 $ F → id іd1 іd2 $ -
  $ E' T' id id2 - id3 $ F → id іd1 іd2 $ -
  $ E' T' - id3 $   іd1 іd2 - $
  $ E' T' - id3 $ T'ε іd1 іd2 - $ -
  $ E' - id3 $   іd1 іd2 - $ -
  $ E' TP - id3 $ E’PTE' іd1 іd2 - $ -
  $ E' T - - id3 $ P → - іd1 іd2– $ -
  $ E'T id3 $   іd1 іd2–іd3 $ -
  $ E' T'F id3 $ TFT' іd1 іd2 – іd3 $ -
  $ E' T' id id3 $ F → id іd1 іd2 – іd3 $ -
  $ E' T' $   іd1 іd2 – іd3 - $
  $ E' $ T'ε іd1 іd2 – іd3 - $
  $ $ E'ε іd1 іd2 – іd3 - $

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



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