java - 区分词汇错误和语义错误

标签 java lexical

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

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

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

最佳答案

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

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

您的第二个错误可以归类为词法错误(因为字符串“inw”不是有效关键字)或语法错误(“inw”可能是变量的名称,但在其中包含变量名称是不合法的语法上下文)。

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

查看 whats-the-difference-between-syntax-and-semantics 的答案了解更多详情。

关于java - 区分词汇错误和语义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39522765/

相关文章:

Haskell:字符 'i' 处的字符串/字 rune 字中的词法错误

perl - 为什么我不能使用 Perl 变量的值来访问词法变量名?

Java程序经过几行代码,最终进入

java - 如果时区设置为 "XXX",SimpleDateFormat 将忽略 "UTC"

string - Haskell 连接字符串时出现词法错误

javaparser - 遇到词法错误 : <EOF> after : ""

java - java中分割字符串后如何重新排列?

java - 在电子邮件中发送阿拉伯文本

java - 如何根据cmd行参数将不同级别的日志输出到stdout?

C词法分析器。使用开关分析和计算小数/非小数