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