这是Lexical分析错误的例子吗?

时间:2014-10-18 14:50:41

标签: compiler-construction

请考虑以下声明。

char a =`a;

在编译器设计的情况下,它是什么样的错误,词汇或语法?

4 个答案:

答案 0 :(得分:2)

它既不是。

谁说这个结构无效?

这完全取决于您的定义。

例如,您可能已经定义了'符号可能只成对出现,例如"用于描述字符串文字。那将是一个词汇错误。

OTOH,`可能是某些预定义的中缀运算符,如*。然后这将是语法错误,因为表达式的左侧缺失。

或者`可能是整数上的一元运算符,那么它将是一个类型错误,因为它显然是一个字符。

答案 1 :(得分:0)

它"只是"语法错误;语法告诉你写什么是合法的,但事实并非如此。

人们会谈论一种特殊的语法错误,并说有一个格式错误的令牌或词汇。但这只是一个与编辑器内部相关的细节。

如果编写了这段代码,那就是你的错误,而不是编译器。

答案 2 :(得分:0)

如果反引号或后跟字母后跟字母是您的语言中的有效标记,则这是语法错误(除非“后跟标识符后退”实际上是您语言中语法上有效的表达式)。

如果你的语言没有反引号或反引号后跟字母标记,那就是一个词法错误。

如果您的语言(有点令人惊讶/反直觉)使用反字符作为字符文字(使用表单反引号,字符,反引号),它仍然是一个词法错误,因为字符文字是未闭合的。

答案 3 :(得分:0)

这是一个词汇错误。


角色的正则表达式可以是 '((\)|。[^ \'])'


这会接受任何字母,例如'a','z','\ t','\ n'。

如果你的词法分析器没有找到开头或结尾的单引号,它会标出一个词汇错误。 如果a或=或'a'或;这将是语法错误从上面的表达中遗漏了。