语法检查和语义检查是编译过程中的两道手序。区别如下:
1.语法检查(Syntax Checking)
语法检查是第一道检查,就像英语的语法一样,它检查的是存不存在语法错语。
最常见的语法错误是错别字(if写成it)、缺胳膊少腿(少括号、分号)。
2.语义检查(Semantic Checking)
语义检查是语法检查之后进行的更高级别的检查。它关注代码的含义,检查的是逻辑。
比如标识符未定义(使用了未定义的变量、函数),函数未被正确调用(参数数量、类型和顺序与函数声明不符),以及存在未定义的行为(除以零、数组越界)。
总之,语法检查比较低级,就是无脑流、背条文;语义检查比较高级,有逻辑判断。就像过安检,如果你带了大规模杀伤性武器,语法检查就会把你拿下,但如果你只是带个小孩儿,它就奈何不了你。可如果这个孩子一直哇哇大哭,狂喊救命,那么安检人员仍然可能将你拿下,这时候用的就是语义检查。