请考虑以下声明。
char a =`a;
在编译器设计的情况下,它是什么样的错误,词汇或语法?
答案 0 :(得分:2)
它既不是。
谁说这个结构无效?
这完全取决于您的定义。
例如,您可能已经定义了'符号可能只成对出现,例如"用于描述字符串文字。那将是一个词汇错误。
OTOH,`可能是某些预定义的中缀运算符,如*。然后这将是语法错误,因为表达式的左侧缺失。
或者`可能是整数上的一元运算符,那么它将是一个类型错误,因为它显然是一个字符。
答案 1 :(得分:0)
它"只是"语法错误;语法告诉你写什么是合法的,但事实并非如此。
人们会谈论一种特殊的语法错误,并说有一个格式错误的令牌或词汇。但这只是一个与编辑器内部相关的细节。
如果你编写了这段代码,那就是你的错误,而不是编译器。
答案 2 :(得分:0)
如果反引号或后跟字母后跟字母是您的语言中的有效标记,则这是语法错误(除非“后跟标识符后退”实际上是您语言中语法上有效的表达式)。
如果你的语言没有反引号或反引号后跟字母标记,那就是一个词法错误。
如果您的语言(有点令人惊讶/反直觉)使用反字符作为字符文字(使用表单反引号,字符,反引号),它仍然是一个词法错误,因为字符文字是未闭合的。
答案 3 :(得分:0)
这是一个词汇错误。
角色的正则表达式可以是 '((\)|。[^ \'])'
这会接受任何字母,例如'a','z','\ t','\ n'。
如果你的词法分析器没有找到开头或结尾的单引号,它会标出一个词汇错误。 如果a或=或'a'或;这将是语法错误从上面的表达中遗漏了。