What is the difference between syntax and semantics in programming languages?

后端 未结 10 1949
长情又很酷
长情又很酷 2020-12-04 04:51

What is the difference between syntax and semantics in programming languages (like C, C++)?

10条回答
  •  鱼传尺愫
    2020-12-04 05:28

    Understanding how the compiler sees the code

    Usually, syntax and semantics analysis of the code is done in the 'frontend' part of the compiler.

    • Syntax: Compiler generates tokens for each keyword and symbols: the token contains the information- type of keyword and its location in the code. Using these tokens, an AST(short for Abstract Syntax Tree) is created and analysed. What compiler actually checks here is whether the code is lexically meaningful i.e. does the 'sequence of keywords' comply with the language rules? As suggested in previous answers, you can see it as the grammar of the language(not the sense/meaning of the code). Side note: Syntax errors are reported in this phase.(returns tokens with the error type to the system)

    • Semantics: Now, the compiler will check whether your code operations 'makes sense'. e.g. If the language supports Type Inference, sematic error will be reported if you're trying to assign a string to a float. OR declaring the same variable twice. These are errors that are 'grammatically'/ syntaxially correct, but makes no sense during the operation. Side note: For checking whether the same variable is declared twice, compiler manages a symbol table

    So, the output of these 2 frontend phases is an annotated AST(with data types) and symbol table.

    Understanding it in a less technical way

    Considering the normal language we use; here, English:

    e.g. He go to the school. - Incorrect grammar/syntax, though he wanted to convey a correct sense/semantic.

    e.g. He goes to the cold. - cold is an adjective. In English, we might say this doesn't comply with grammar, but it actually is the closest example to incorrect semantic with correct syntax I could think of.

提交回复
热议问题