2010-08-13 2 views
3

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

enum X : int { a = 1 } 

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

+0

Эта книга хорошо описывает некоторые компромиссы с использованием языковых функций на разных уровнях: http://pragprog.com/titles/tpdsl/language-implementation-patterns, хотя я должен признать, что я не уверен, что это напрямую решает этот вопрос. – sarnold

+0

Я прочитал, что книга и отсутствие такой информации заставили меня задать вопрос здесь. Я думаю, мой вопрос чисто теоретический. Я хочу знать, какой подход лучше. –

ответ

2

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^