So kann man das nicht sagen. Die Syntaxprüfung beinhaltet nur, ob der Quelltext der Struktur der jeweiligen Programmiersprache entspricht. Da ist noch nichts übersetzt.
Die Trennung zwischen semantischem Fehler und logischem Fehler ist nicht immer eindeutig möglich, es hängt auch oft von der Absicht des Programmierers ab, und die kann der Compiler nicht kennen.
Das ist völlig korrekt so. Eine Anweisung kann aus einem Ausdruck, abgeschlossen mit einem Semikolon, bestehen, und ein numerisches Literal ist auch ein Ausdruck. Dass der "Wert" dieses Ausdrucks nicht weiterverarbeitet wird, macht ja nichts.
Nachtrag:
Ein Compiler dürfte sich aber laut Standard über "void main" beklagen.
Das wäre dann IMHO ein semantischer Fehler.