Qual é a diferença entre sintaxe e semântica?

84

Sempre achei que referir-se à sintaxe de uma linguagem era o mesmo que referir-se à semântica de uma linguagem. Mas eu fui informado que aparentemente esse não é o caso. Qual a diferença?

    
por gsingh2011 12.10.2011 / 07:28
fonte

13 respostas

102

Semântica ~ Significado

Sintaxe ~ Representação simbólica

Assim, dois programas escritos em linguagens diferentes poderiam fazer a mesma coisa (semântica), mas os símbolos usados para escrever o programa seriam diferentes (sintaxe).

Um compilador verificará sua sintaxe por você (erros de tempo de compilação) e derivará a semântica das regras de idioma (mapeando a sintaxe para instruções de máquina), mas não encontrará todos os erros semânticos (erros de tempo de execução) , por exemplo, calcular o resultado errado porque o código diz adicionar 1 em vez de adicionar 2).

    
por 12.10.2011 / 09:20
fonte
35

Na verdade, não há dois níveis, mas três:

  • nível léxico: como os caracteres são combinados para produzir elementos de linguagem ( i e f produz if )
  • nível sintático: como os elementos de linguagem são combinados para produzir expressões de idioma ( if , ( , 42 , == , answer e ) produz uma instrução condicional)
  • nível semântico: como as expressões de linguagem são convertidas em instruções de CPU para formar um significado (uma instrução condicional permite executar uma ramificação ou outra dependendo do resultado da expressão booleana)
por 12.10.2011 / 10:31
fonte
16

Vou explicar para você com um exemplo simples na linguagem ENGLISH :

The glass drank Ben

É uma declaração sintaticamente correta. Tem um substantivo, um verbo, etc.

Mas semanticamente está errado, porque esta afirmação não tem nenhum significado concebível ou correto.

    
por 15.03.2013 / 08:26
fonte
15

Semântica descreve as entidades lógicas de uma linguagem de programação e suas interações. Sintaxe define como eles são expressos em caracteres.

Por exemplo, o conceito de aritmética de ponteiros é parte da semântica de C; A maneira como os operadores + e - podem ser usados para expressar operações de ponteiro fazem parte de sua sintaxe.

Às vezes, dois idiomas compartilham parte de sua semântica, mas a sintaxe difere amplamente (por exemplo, C # e VB.NET - ambos usam tipos de valor e tipos de referência, mas os caracteres que você digita para defini-los são diferentes); em outros casos, duas linguagens são sintaticamente semelhantes, mas a semântica não combina (considere Java x JavaScript, onde as semelhanças costumam confundir os iniciantes).

    
por 12.10.2011 / 07:35
fonte
6

A sintaxe é como você organiza os tokens de um idioma. Semântica é o que esses tokens significam (geralmente, o que significa um arranjo particular de tokens).

    
por 12.10.2011 / 12:30
fonte
5

Você não especificou se você se refere apenas a linguagens de programação ou a linguagens gerais usadas em programação, então minha resposta é sobre linguagens de dados (como XML, RDF, sistemas de tipo de dados etc.):

Brian L. Meek em suas sete regras de ouro para produzir padrões independentes de linguagem (1995) escreve que "a sintaxe de uma linguagem pode ser a semântica de outra" . Ele se refere às palavras "sintaxe" e "semântica" usadas na descrição dos dados: assim, se você se deparar com essas palavras em uma especificação de algum formato de dados, deve substituir melhor as duas palavras por "Potrzebie" . deixe claro que você deve descobrir o significado por si mesmo.

A relação entre sintaxe e semântica, pelo menos em dados exatamente especificados, pode ser melhor descrita pelo termo "codificação" . Semântica é codificada na sintaxe. Como as gravações podem ser aninhadas, a sintaxe de uma das linguagens é a semântica de outra. Se alguém vai além do reino dos dados, este aninhamento pode ser virtualmente infinito, como descrito por Umberto Eco como "semiose ilimitada".

Para dar um exemplo:

  • A sintaxe XML (o material com todos esses colchetes) é sintaxe com um XML Infoset (uma árvore abstrata) como semântica.
  • Um XML Infoset como sintaxe pode expressar um registro em algum formato de dados XML como semântico, por exemplo, um documento RDF / XML que codifica um gráfico RDF.
  • Um gráfico RDF (o material com Referências de URI) como sintaxe codifica um gráfico de recursos abstratos como semântico.
  • Um gráfico de recursos abstratos como sintaxe codifica um modelo conceitual como semântico.

As pessoas geralmente param em algum nível e tomam isso como semântico, mas no final não há semântica final a menos que algum ser humano interprete os dados em sua mente. Tão logo alguém tenta expressar semântica em forma de dados, torna-se sintaxe.

    
por 13.12.2012 / 20:15
fonte
4

Se puder ser descrito em BNF (Backus-Naur Form) ou algo similar, é a sintaxe. Se não puder, não é.

Semântica, por outro lado, é sobre o significado de um programa (ou outro pedaço de código-fonte).

E, às vezes, a linha entre os dois pode ficar embaçada.

Uma maneira de entender a diferença é observar os tipos de erros que você recebe quando a sintaxe ou semântica do seu programa está incorreta.

Um erro de sintaxe é uma falha do código-fonte para corresponder à gramática do idioma, por exemplo, não ter um ponto-e-vírgula onde é necessário.

Um erro semântico é uma falha em satisfazer outros requisitos de linguagem (o que C, por exemplo, chama de "restrições"); um exemplo pode estar escrevendo x + y , em que x e y são de tipos incompatíveis. A gramática da linguagem diz que uma adição se parece com something + something , mas não é poderosa o suficiente para expressar os requisitos dos tipos de operandos esquerdo e direito.

(Erros lógicos, como usar 1 onde 2 estaria correto, geralmente não são detectáveis pelo compilador - embora em alguns casos um compilador possa avisar sobre códigos questionáveis.)

    
por 13.10.2011 / 02:35
fonte
0

Sintaxe é o que os símbolos (lexicais) dizem. Semântica é o que eles significam.

Considere:

C #: condition ? true_value : false_value
VB.NET: If(condition, true_value, false_value)
- Sintaxe diferente, mesma semântica.

C #: left_value / right_value
VB.NET: left_value / right_value
- Mesma sintaxe, semântica diferente (para inteiros).

    
por 22.02.2013 / 05:14
fonte
0

A sintaxe é a disposição gramatical das palavras em uma frase, ou seja, a ordem das palavras.

(Inglês) ‘ gato cãozinho ’ e (programação) ‘ hi.5 ’ não são sintaticamente correctos.

(Inglês) ‘ gato abraça menino ’ e (programação) ‘* 3.2 * 5 *’ é sintaticamente válido.

Static Semantics é se as declarações sintaticamente válidas têm algum significado.

(em inglês) ' eu sou grande ' (programação) (python) ' 3 +' hi '' está sintaticamente correto, mas tem erro semântico estático.

Semântica é o significado associado à sequência de símbolos sintaticamente correta sem nenhum erro semântico estático, ou seja, a sentença é sintática e semanticamente correta, mas seu significado pode não ser o pretendido.

(Inglês) ' Aviões que voam podem ser perigosos ' pode ter dois significados, ou seja, voar de aviões pode ser perigoso ou os aviões que voam podem ser perigosos.

(Programação) ‘o computador não irá gerar mensagens de erro, mas não fará o que você mandou fazer; vai fazer outra coisa. '

Fonte : MIT 6.00.1

    
por 15.10.2016 / 07:19
fonte
-2
  1. A sintaxe se refere a regras formais que governam a construção de declarações válidas em um idioma. Semântica refere-se ao conjunto de regras que dão o significado de uma declaração.

  2. Erros devido à sintaxe ocorrem em um programa quando os ruéis da linguagem de programação são violados ou mal utilizados. Erros devido à semântica ocorrem em um programa quando as declarações não são significativas.

  3. A ordem do Word é o princípio básico da sintaxe, aqueles que tentam entender o que está escrito usar as sugestões sintáticas de ordem das palavras para ajudar a dar a estrutura da sentença e significado. A semântica é uma interpretação individual do significado de um "sentença" com base em seu conhecimento prévio. Portanto, uma frase que aparentemente não faz sentido sintático, pode ter significado ao usar sugestões semânticas.

  4. A sintaxe só se preocupa com o que é linguisticamente e gramaticalmente correto. A semântica requer todos os conhecimentos prévios, e está muito além de qualquer coisa específica do idioma.

  5. A frase "Bebe leite bebida" não tem um significado sintático, mas através da semântica a maioria das pessoas iria interpretar como "bebê bebe leite" como o nosso conhecimento prévio nos diz que um bebê bebe leite e, portanto, nós pode encontrar um significado a partir das palavras-chave.

por 15.03.2013 / 06:48
fonte
-2

A sintaxe e a semântica são estratégia e tática ou para a esquerda e para a direita .

Eles não são conceitos universais realmente independentes, mas um par de palavras relacionadas que, quando você está em um contexto particular, indica direções opostas. Mas a mesma coisa que é estratégia em uma escala é a tática em outra.

Então, se você está escrevendo código em uma linguagem, a sintaxe é a linguagem que você está usando e o comportamento desejado é a semântica. Mas se você está implementando, ou discutindo, o compilador para essa linguagem, então a sintaxe é a gramática e talvez o sistema de tipos e a semântica que é construída sobre isso. E assim por diante.

    
por 08.02.2014 / 11:12
fonte
-3

Sintaxe é o que o computador entende, a semântica é o que o ser humano entende.

Um compilador / intérprete não se importa nem um pouco com o seu design, e em qualquer código compilado no nível da máquina você teria dificuldade em deduzir o design. Os desenvolvedores se importam com o design porque um bom design é sobre a redução da complexidade, abstraindo comportamentos complexos e interações, e diferentes tipos de problemas se prestam a diferentes semânticas. A escolha da linguagem é em grande parte sobre a facilidade e eficiência com que a semântica que você deseja usar pode ser expressa em sua sintaxe.

    
por 12.10.2011 / 14:10
fonte
-3

Exemplo muito curto com "plain c":

void main()
{
  int a = 10;
  int x = a - 1;
  int y = - 1;

  printf("x = %i", x);
  printf("y = %i", y);
    getch();
}

Neste exemplo, a sintaxe do token "-" é a mesma, mas, tem um significado diferente ("semântico), dependendo de onde é usado.

Na designação "x", "-" significa a operação de "subtração", Na atribuição "y", "-" significa a operação "sinal negativo".

    
por 12.10.2011 / 19:14
fonte