Eu entendo a diferença entre sintaxe e semântica -
Sintaxe : como os símbolos são combinados para formar uma expressão ou declaração válida.
Semântica : o significado desses símbolos que formam uma expressão ou afirmação.
Mas qual é a gramática? Por exemplo: às vezes ouço as pessoas dizerem que alguma construção é "gramaticalmente incorreta, mas sintaticamente está correta". O que isso significa?
int;
é gramaticalmente válido, mas sintaticamente mal formado em C ++. A gramática não tem problemas com esse código, mas as restrições de sintaxe exigem que um nome seja fornecido se a primeira parte de uma declaração não contiver especificador de classe ou enum-especificador ou, no C ++ 11, especificador de amigo .Respostas:
Uma gramática é um conjunto de regras que definem a sintaxe para um idioma específico.
Quando as pessoas estão falando especificamente sobre um analisador (especialmente um gerado com um gerador de analisador como yacc, Byacc, ANTLR etc.), podem fazer um pouco mais de cortar o cabelo e falar especificamente sobre as regras sintáticas que são codificadas usando o gerador do analisador. regras, vs. as partes que são aplicadas separadamente pelo código anexado a uma regra. Por exemplo, em C quando você define uma matriz, o tamanho especificado para a matriz deve ser estritamente positivo (não zero). A regra gramatical pode dizer basicamente algo como:
... e, separadamente, haveria um pouco de código para verificar se o unsigned_int era diferente de zero. Nesse caso, poderia fazer algum sentido falar sobre os requisitos da sintaxe e da gramática separadamente um do outro, com os dois tendo requisitos um pouco diferentes (que, aplicados juntos, presumimos atender aos requisitos do próprio idioma).
fonte
A diferença é imprecisa e não vale a pena se preocupar demais.
Às vezes, as pessoas incluem restrições sensíveis ao contexto sob a égide da correção sintática. O exemplo mais comum é um sistema de tipos. Outra é a regra "sem instruções após o retorno" de Java. Isso simplifica a discussão formal: a sintaxe produz uma linguagem (um conjunto de frases / expressões / programas) que é o domínio da semântica; qualquer outra coisa "não é um programa", e a semântica não precisa se preocupar com isso.
Por outro lado, "gramática" geralmente se refere a um método para descrever linguagens livres de contexto (não obstante as gramáticas de atributos).
A razão pela qual não vale a pena se preocupar é que os sistemas de tipos são frequentemente considerados a " semântica estática " de uma linguagem, assim como uma " disciplina sintática da correção". E, às vezes, uma linguagem não possui uma gramática livre de contexto; C, por exemplo, deve alimentar as informações do analisador novamente no lexer.
Pragmaticamente, qualquer pessoa que confie na distinção entre "sintático" e "gramatical" deve dizer isso e explicar o que quer dizer.
fonte
Uma gramática é um conjunto de regras para definir um idioma. Em vez disso, a gramática descreve a sintaxe e a semântica . Um idioma pode ter duas gramáticas diferentes:
Por exemplo, uma parte da gramática em C pode ser algo como:
Significado:
Dê uma olhada nesta maneira de definir uma gramática . Se você está realmente curioso sobre gramáticas, dê uma olhada no GNU Bison , que é basicamente uma ferramenta para descrever a gramática de um idioma.
O "gramaticalmente incorreto, mas sintaticamente correto" não faz muito sentido. Talvez eles estejam se referindo a uma gramática que descreve a semântica de uma linguagem. Certamente faria mais sentido dizer apenas "não semanticamente correto".
fonte