Различение лексической ошибки и семантической ошибки
В чем разница между этими двумя ошибками, лексической и семантической?
int d = "orange";
inw d = 4;
Будет ли первый семантической ошибкой? Так как вы не можете назначить литерал для int? Что касается второго, отдельные токены перепутаны, так что это будет лексическим? Это мой мыслительный процесс, я могу ошибаться, но я хотел бы понять это немного больше.
1 ответ
На самом деле существует три общепризнанных уровня интерпретации: лексический, синтаксический и семантический. Лексический анализ превращает цепочку символов в токены, синтаксически строит токены в допустимые операторы на языке и семантически интерпретирует эти операторы правильно для выполнения некоторого алгоритма.
Ваша первая ошибка семантическая: хотя все токены допустимы, в Java недопустимо присваивать строковую константу целочисленной переменной.
Ваша вторая ошибка может быть классифицирована как лексическая (так как строка "inw" не является допустимым ключевым словом) или как синтаксическая ("inw" может быть именем переменной, но это недопустимый синтаксис иметь имя переменной в этом контексте).
Семантическая ошибка может также быть чем-то законным в языке, но не представляющим предполагаемый алгоритм. Например: "1" + n
Это совершенно правильный код, но если он намеревается сделать арифметическое добавление, то он имеет семантическую ошибку. Некоторые семантические ошибки могут быть обнаружены современными компиляторами, но такие, как они, зависят от намерения программиста.
Посмотрите ответы на вопросы " что такое разница между синтаксисом и семантикой" для более подробной информации.