The parser/lexer consider the syntax of the language. Syntax is easy. Semantics is about meaning. It's quite easy to have non-clearly-defined meanings of syntactic constructs! Just write some vague language in the specification. Don't confuse the semantics of the language with the behavior of a particular implementation (eg, GCC). It's important for the language to have clear, well-defined semantics so that implementations can be compatible and programmers, compilers, analysis tools, etc can all agree on the meaning of a program.
Follow some links from the page for concrete examples:
Follow some links from the page for concrete examples:
https://www.cl.cam.ac.uk/~pes20/cerberus/n2090.html
https://www.cl.cam.ac.uk/~pes20/cerberus/n2089.html
And, of course, their paper, which has examples and explanations: https://www.cl.cam.ac.uk/~km569/into_the_depths_of_C.pdf