Семантика - это значение различных элементов в программе (или что-то еще).
Например, давайте посмотрим на этот код:
int width, numberOfChildren;
Обе эти переменные являются целыми числами. С точки зрения компилятора, они абсолютно одинаковы. Однако, судя по именам, одно - это ширина чего-то, а другое - это число других вещей.
numberOfChildren = width;
Синтаксически это нормально на 100%, так как вы можете назначать друг другу целые числа. Однако, с семантической точки зрения, это совершенно неправильно, так как ширина и количество детей (вероятно) не имеют никакого отношения. В этом случае мы бы сказали, что это семантически неверно, даже если компилятор это разрешает.