Из того, что я вижу: вас просят написать две функции
как часть синтаксический анализатор с рекурсивным спуском.
Для других нетерминальных символов, stmts
и value
, вам разрешено предположить существование предварительно написанных функций с такими же именами.
Как написать анализатор рекурсивного спуска должен был обсуждаться в лекциях и руководствах, поэтому я предполагаю, что вы знаете, как это работает.
Чтобы получить следующий токен из входного потока, вы можете вызвать lex()
, который возвращает код, как указано в кодах для символов терминала. Вам нужно реализовать ifblock
, запросив коды токенов, позвонив по номеру lex()
, и оценить и сопоставить их с необходимыми токенами в соответствии с грамматикой языка. Обратите внимание, что часть else
в ifblock
является необязательной в соответствии с грамматикой.
Чтобы оценить логическое выражение if
, вам нужно перейти к функции logic_expr
, которую вы запрашиваете чтобы написать, который оценивает логическое выражение, как определено в грамматике. Опять же, вы можете предположить, что функция для нетерминала value
уже существует.