Я понимаю разницу между синтаксисом и семантикой -
Синтаксис : как символы объединяются в правильное выражение или утверждение.
Семантика : значение тех символов, которые образуют выражение или утверждение.
Но что такое грамматика? Например: иногда я слышу, как люди говорят, что какая-то конструкция «грамматически неверна, но синтаксически это правильно». Что это означает?
int;
, грамматически допустимо, но синтаксически плохо сформировано в C ++. Грамматика не имеет проблем с этим кодом, но синтаксические ограничения требуют, чтобы имя указывалось, если первая часть объявления не содержит спецификатора класса или спецификатора перечисления или, в C ++ 11, спецификатора друга .Ответы:
Грамматика - это набор правил, которые определяют синтаксис для конкретного языка.
Когда люди говорят конкретно о парсере (особенно тот, который сгенерирован с помощью генератора парсера, такого как yacc, Byacc, ANTLR и т. Д.), Они могут немного больше расстраиваться и говорить конкретно о тех синтаксических правилах, которые кодируются с помощью генератора. правила по сравнению с теми частями, которые применяются отдельно кодом, прикрепленным к правилу. Например, в C, когда вы определяете массив, размер, который вы указываете для массива, должен быть строго положительным (не нулевым). Правило грамматики может в основном сказать что-то вроде:
... а затем отдельно, было бы немного кода, чтобы проверить, что unsigned_int был ненулевым. В этом случае может иметь смысл говорить о требованиях к синтаксису и грамматике отдельно друг от друга, так как эти два имеют немного разные требования (которые, соблюдая друг друга, мы предполагаем, соответствуют требованиям самого языка).
источник
Разница нечеткая и не стоит беспокоиться о чересчур.
Люди иногда включают контекстно-зависимые ограничения под эгидой синтаксической корректности. Наиболее распространенный пример - система типов. Другое - это правило Java «без утверждений после возврата». Это упрощает формальное обсуждение: синтаксис дает язык (набор предложений / выражений / программ), который является областью семантики; все остальное не "программа", и семантика не должна беспокоиться об этом.
Напротив, «грамматика» обычно относится к методу описания языков без контекста (несмотря на атрибутную грамматику).
Причина, по которой беспокоиться не о чем, заключается в том, что системы типов так же часто рассматриваются как «статическая семантика » языка, как и « синтаксическая дисциплина для корректности». И иногда у языка не совсем правильная грамматика без контекста; C, например, должен передавать информацию из анализатора обратно в лексер.
Прагматически, любой, кто опирается на различие между «синтаксическим» и «грамматическим», должен лучше сказать об этом и объяснить, что они имеют в виду.
источник
Грамматика - это набор правил для определения языка. Скорее, грамматика описывает синтаксис и семантику . Язык может иметь две разные грамматики:
Например, часть грамматики в C может выглядеть примерно так:
Смысл:
Взгляните на этот способ определения грамматики . Если вам действительно интересны грамматики, взгляните на GNU Bison , который в основном является инструментом для описания грамматики языка.
«Грамматически неправильный, но синтаксически правильный» не имеет особого смысла. Возможно, они имеют в виду грамматику, описывающую семантику языка. Конечно, было бы более разумно просто сказать «не семантически правильно».
источник