Swift类语言C实现解释器:词法与语法错误判定咨询
区分词法错误与语法错误:类Swift解释器实例分析
核心区别
- 词法错误:发生在词法分析(Tokenizer)阶段,本质是输入的字符序列无法被拆解为语言预定义的合法词法单元(比如关键字、运算符、标识符、字面量等)——简单说就是“认不出单个零件”。
- 语法错误:发生在语法分析(Parser)阶段,所有词法单元都是合法的,但它们的组合顺序/结构不符合语言的语法规则——也就是“零件都是对的,但拼错了”。
针对你的两个代码实例分析
result = a -/ b:词法错误
类Swift语言中没有-/这个合法运算符,词法分析器扫描到-之后紧跟/时,无法将这个字符组合识别为任何预定义的词法单元(既不是单独的-或/,也不是合法的复合运算符),因此属于词法错误。if (result ==> ):语法错误
先拆解词法单元:if(关键字)、((左括号)、result(标识符)、==(比较运算符)、>(大于运算符)、)(右括号)——所有这些单元都是类Swift语言中合法的词法元素。但问题在于,按照语言语法,if的条件部分需要是一个完整的表达式,这里==后直接跟>的组合不符合表达式规则,且条件末尾缺少合法的操作数,属于合法零件的错误组合,因此是语法错误。
快速判定方法
先试着把代码拆成最小的合法单元:如果拆到某一段字符时,找不到对应语言里的合法单元,就是词法错误;如果所有单元都合法,但组合起来不符合语句/表达式的结构规则,就是语法错误。
内容的提问来源于stack exchange,提问作者Marcinnn123
相关产品推荐
相关产品推荐

