Хотя не сказано, я полагаю, что мы пытаемся интерпретировать строку A + (C - D)/B как <expr>
(как никакие другие разбора работ).
<expr>
является нетерминальным символом, то есть буквально не является окончательной строкой. Скорее, первое правило (<expr> -> <expr> + <term> | <expr> - <term> | <term>
) сообщает нам, какие символы ожидать в строке, которая является <expr>
. В нем говорится, что <expr>
могут быть сделаны из одного из следующих вариантов:
<expr> + <term>
, т.е. <expr>
с последующим +
с последующим <term>
или
<expr> - <term>
(интерпретируется аналогично), или
<term>
Не вдаваясь в подробности того, как синтаксический анализатор будет механически принимать решение, мы должны выбрать один из этих вариантов для продолжения bu построение дерева синтаксического анализа. Я выбрать первый вариант (<expr> + <term>
), который предполагает, что первый <expr>
будет представлять в сообщении, +
буквально +, а <term>
является остальные (C - D)/В , Таким образом, начало нашего синтаксического дерева выглядит следующим образом:
<expr>
/| \
/| \
<expr> + <term>
Это еще не полный синтаксический анализ, так как это не сразу видно из правил, что <expr>
может дать результат . Аналогично (C - D)/B не является прямой опцией для <term>
.Мы можем ответить на первое возражение, видя, что:
<expr>
может быть <term>
(по третьему варианту правил для <expr>
)
<term>
в своей очереди, может быть <factor>
(по третьему варианту правил для <term>
)
<factor>
может быть <id>
(по второму варианту правила для <factor>
), и, наконец,
<id>
может быть (по первому варианту правил для <id>
)
Этой линия рассуждений заполняющей синтаксического дерева следующим образом:
<expr>
/| \
/| \
<expr> | <term>
| |
<term> |
| |
<factor>|
| |
<id> |
| |
A +
Я надеюсь, что это дает вам представление о процессе и смысл правил, чтобы вы могли показать, как <term>
может дать (C - D)/B и таким образом заполнить остальную часть дерева.
Да, вы правильно думаете, что вход идет для ''. Думаю, мне удалось это понять. Вот образ моего дерева синтаксического анализа: http://i.imgur.com/GVArYJw.png –
nward17
Кроме того, не должно быть '', затем' ', а затем ''? Я думаю, ты забыл один шаг. –
nward17
Я думаю, что несколько уровней вашего дерева назад (нетерминалы должны появляться в том же порядке слева направо, что и в правилах), но ваша структура выглядит правильно. – hcs