Comment by tmoertel
3 months ago
In short: Syntax defines the textual forms that the language allows. Semantics define how each form is interpreted.
Consider a simple calculator language that lets you add positive integers.
The syntax might give grammar rules like:
expr ::= digits (EOF | ' + ' expr)
digits ::= ('0' | '1' | ... | '9')+
This grammar admits expressions like 33 and 2 + 88 + 344. That's syntax.
But how the language interprets those expressions is semantics. Continuing our calculator example:
1. Every expr evaluates to an integer value.
2. An expr of the form `<digits> EOF` evaluates to the integer given by interpreting the digits in <digits> as an integer in base 10.
3. If <expr> evaluates to the value x, then an expr of the form `<digits> + <expr>` evaluates to the value y + x, where y is the integer given by interpreting the digits in <digits> as an integer in base 10.
Of course, specifying semantics in human language is tedious and hard to make precise. For this reason, most programming languages give their semantics in a more formalized language. See, for a classic example, the R5RS specs for Scheme:
https://conservatory.scheme.org/schemers/Documents/Standards...
No comments yet
Contribute on Hacker News ↗