Изменения
→Нерекурсивный нисходящий парсер
== Нерекурсивный нисходящий парсер ==
[[Файл:Parse_table.png|350px|thumb|right]]
Рекурсивные разборщики можно генерировать автоматически, зная множества FIRST и FOLLOW, так как они имеют достаточно прозрачный шаблон построения. Альтернативным способом осуществления нисходящего синтаксического анализа является построение нерекурсивного нисходящего парсера. Его можно построить с помощью явного использования стека (вместо неявного при рекурсивных вызовах). Такое анализатор имитирует левое порождение.
[[Файл:Parse_stack.png|500px|thumb|right]]
<tex>
(1) \ E \to TE' \\
(2) \ E' \to +TE' \\
(3) \ E' \to \varepsilon \\
(4) \ T \to FT' \\
(5) \ T' \to \times FT' \\
(6) \ T' \to \varepsilon \\
(7) \ F \to n \\
(8) \ F \to (E)
</tex>
{| style="background-color:#CCC;margin:0.5px"
!style="background-color:#EEE"|
!style="background-color:#EEE"| n
!style="background-color:#EEE"| (
!style="background-color:#EEE"| )
!style="background-color:#EEE"| +
!style="background-color:#EEE"| *
!style="background-color:#EEE"| $
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>E</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>1 </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>1 </tex>
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>E'</tex>
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"| <tex>3 </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>2 </tex>
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"| <tex>3 </tex>
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>T</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>4 </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>4 </tex>
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>T'</tex>
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"| <tex>6 </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>6 </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>5 </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>6 </tex>
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>F</tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>7 </tex>
|style="background-color:#FFF;padding:2px 30px"| <tex>8 </tex>
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|-
|style="background-color:#FFF;padding:2px 30px"| <tex>end</tex>
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|style="background-color:#FFF;padding:2px 30px"|
|}