Рубрики

ВОРОТА | GATE-CS-2005 | Вопрос 85

Рассмотрим следующую грамматику выражения. Семантические правила для вычисления выражения изложены рядом с каждым грамматическим произведением.

 E → number 	 E.val = number. val
    | E '+' E 	 E(1).val = E(2).val + E(3).val
    | E '×' E	 E(1).val = E(2).val × E(3).val

Приведенная выше грамматика и семантические правила передаются инструменту yacc (который является генератором синтаксического анализатора LALR (1)) для анализа и оценки арифметических выражений. Что из следующего верно в отношении действия yacc для данной грамматики?
(A) Он обнаруживает рекурсию и устраняет рекурсию
(B) Он обнаруживает конфликт «уменьшить-уменьшить» и разрешает
(C) Он обнаруживает конфликт с уменьшением сдвига и разрешает конфликт в пользу сдвига по действию сокращения
(D) Он обнаруживает конфликт со смещением и разрешает конфликт в пользу действия по сокращению за смену

Ответ: (с)
Объяснение:

Фон
Разрешение конфликта YACC осуществляется с использованием следующих правил:
сдвиг предпочтительнее уменьшения, а сдвиг / уменьшение конфликта.
первое уменьшение предпочтительнее других, в то время как уменьшение / уменьшение конфликта.

Вы можете прямо ответить на этот вопрос, создав таблицу анализа LALR (1), хотя это занимает много времени. Чтобы ответить на него быстрее, можно интуитивно увидеть, что эта грамматика наверняка будет иметь конфликт сдвига-уменьшения. В этом случае, учитывая, что это вопрос с единственным выбором, вариант (C) будет правильным ответом.

Надежным объяснением было бы создание таблицы анализа LALR (1), что является длительным процессом. Когда у нас есть таблица разбора, мы можем ясно видеть, что
я. уменьшение / уменьшение конфликта не возникнет в приведенной выше грамматике
II. Конфликт сдвиг / уменьшение будет разрешен путем предоставления предпочтения сдвигу, что делает калькулятор выражений правым ассоциативным.

Согласно приведенным выше выводам, единственно правильным вариантом является (C).

Referance:

http://dinosaur.compilertools.net/yacc/

Это решение предоставлено Vineet Purswani .
Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | GATE-CS-2005 | Вопрос 85

0.00 (0%) 0 votes