У вас также есть определенные ошибки в First
first (p) = {id, input, print, e}
это будет включать эпсилон
* отсутствует в следующих двух -
first(fact_tail) = { *,/, //, %, e} first(mult_op) = {*, /, //, %}
fact_tail → mult_op fact_tail | ε
Я предполагаю, что вы на самом деле имеете в виду
fact_tail → mult_op factor fact_tail | ε
Следовать
follow (stmt) = {id, input, print, $}
если вы ссылаетесь на
stmt_list → stmt stmt_list | ε
затем за stmt следует первый из stmt_list, который включает e, поэтому сгенерированная строка закончится, следовательно, за stmt следует $
follow (expr) = {(, id, number,), ввод, печать,, /, //,%}
Я не знаю, как вы это получили, follow of expr равен follow stmt и)
follow (expr) = {id,), input, print, $}
follow (term_tail) равно follow (expr)
follow (term) = {+, -,), id, input, print, $}
follow (fact_tail) равно follow (term)
follow (factor) = first (fact_tail)
follow (add_op) = первый (термин)
follow (mult_op) = первый (фактор)
Если вы не согласны, пожалуйста, обсудите, а не проголосуйте. Я надеюсь, что это поможет вам