区分词汇错误和语义错误

Distinguishing between lexical error and semantic error

这两个错误,词法错误和语义错误有什么区别?

int d = "orange";
inw d = 4; 

第一个是语义错误吗?因为你不能将文字分配给 int?至于第二个,单个标记被搞乱了,所以它是词法的?这是我的思考过程,我可能是错的,但我想多了解一点。

确实存在三种公认的解释层次:词汇、句法和语义。词法分析将一串字符转换为标记,句法分析将标记构建为语言中的有效语句,语义分析正确地解释这些语句以执行某种算法。

您的第一个错误是语义错误:虽然所有标记都是合法的,但在 Java 中将字符串常量分配给整数变量是不合法的。

您的第二个错误可以分类为词法错误(因为字符串 "inw" 不是有效关键字)或语法错误("inw" 可能是变量的名称,但它不是合法的语法在那个上下文中有一个变量名)。

语义错误也可能是语言中合法但不代表预期算法的内容。例如:"1" + n 是完全有效的代码,但如果它打算进行算术加法,那么它就有语义错误。现代编译器可以发现一些语义错误,但诸如此类的错误取决于程序员的意图。

有关详细信息,请参阅 whats-the-difference-between-syntax-and-semantics 的答案。