Как доказать принадлежность грамматики к классу LL(1)?

Имеется грамматика :

      # Операции
OPERATOR #1 -> +
OPERATOR #2 -> -
OPERATOR #3 -> *
# Сравнение
COMP #1 -> ==
COMP #2 -> !=
COMP #3 -> <
# Начальный символ
S -> PROG
# Тело программы
PROG #1 -> var = RVALUE \n PROG # Присваивание значение переменной
PROG #2 -> int var DECLARE \n PROG # Объявление переменной
PROG #3 -> while ( COND ) { PROG \n PROG # Начало while блока
PROG #4 -> eps # Пусто
# Для работы с переменными, константами
OPERAND #1 -> var # Или переменная

OPERAND #2 -> const # Или константа
# Работа с правой частью
RVALUE #1 -> EXPR # Может быть без унарного минуса
RVALUE #2 -> - EXPR # А может быть с ним
EXPR #1 -> OPERAND EXPR_2 # Переменная / константа и дальнейшие операции
EXPR #2 -> ( RVALUE ) EXPR_2 # Может быть выражение в скобках
EXPR_2 #2 -> OPERATOR EXPR # А может быть знак операции и продолжение выражения
EXPR_2 #1 -> eps # Может ничего не быть
# Объявление переменной
DECLARE #1 -> = RVALUE # Может быть сразу с присваиванием
DECLARE #2 -> eps # А может и без
# Условие в while
COND -> OPERAND COMP OPERAND

Обозначение LL(1) означает, что строки разбираются слева направо (первая L) и используются самые левые выводы (вторая L), а цифра 1 – что варианты порождающих правил выбираются с помощью одного предварительного просмотренного символа. Но этого определения не хватает , чтобы доказать принадлежность к классу LL(1) Помогите доказать или опровергнуть принадлежность грамматики к классу LL(1)


Ответы (0 шт):