Грамматика против семантического анализа - PullRequest
3 голосов
/ 13 августа 2010

Мне интересно, где находится граница между спецификацией грамматики и семантическим анализом.Что лучше: использовать подробное грамматическое описание или оставить детали для семантической фазы?Например: представьте OO-язык, подобный C #, с типом enum, который может «наследоваться» от примитивного типа

enum X : int { a = 1 }

Теперь, если правильность (в данном случае: примитивный или не примитивный тип)базовый тип перечисления будет предметом проверки грамматики или семантического анализа?

1 Ответ

2 голосов
/ 13 августа 2010

Это чрезвычайно широкий вопрос. Есть так много других соображений, так что было бы очень трудно просто сказать, что одна тактика лучше, чем другая во всех ситуациях. Это зависит от вашей цели и определения остальной части языка. Если другие части языка по своей сути синтаксически неоднозначны (и должны быть устранены с помощью семантической информации), то очевидно, что необходимо выполнять задачи как этап семантического анализа.

Тем не менее, я фанат ловить все ошибки как можно раньше. Если ваш язык и цель позволяют вам анализировать полностью однозначное семантическое представление ваших входных данных, не требуя какого-либо семантического анализа для отклонения недопустимых программ, то я считаю, что это будет лучший подход на сегодняшний день.

По сути, вы определенно балансируете свою способность отвергать ошибочные программы как можно раньше со сложностью вашей грамматики и анализатора и дублированием усилий между описанием грамматики и фазой семантического анализа. Я не верю, что когда-либо можно сказать, что делать вещи одним способом лучше, чем другим.

...