句法错误

时间:2009-11-19 12:11:38

标签: c parsing

我正在为练习1-24,K& R2编写代码,它要求编写一个基本的语法调试器。

我制作了一个解析器,状态正常,dquote,squote等......

所以我想知道是否有像

这样的代码片段
/" text "
代码中是否允许

?我应该将此报告为错误吗? (问题是我的解析器在/之后进入comment_entry状态并忽略"。)

3 个答案:

答案 0 :(得分:3)

由于单个/仅表示除法,因此不应将其解释为注释。没有为字符串定义除法运算符,因此像"abc"/"def"这样的东西没有多大意义,但它不应该是语法错误。确定是否可以进行这种划分不应该由解析器完成,而是留待编译的后续阶段在那里决定。

答案 1 :(得分:2)

这在语法上是有效的,但不是语义上的。它应该解析为除法运算符后跟一个字符串文字。你不能用字符串文字来划分东西,所以整体来说它不是合法的代码。

评论以两个字符的标记/*开头,以*/结尾。

答案 2 :(得分:0)

作为一个独立的语法元素,应该将其报告为错误。

理论上(作为表达式的一部分)可以编写

a= b /"text";   / a = b divided through address of string literal "text"

这也是错误的(你不能通过指针划分)。

但是在表面上似乎没问题,因为它会在语法上解码为:变量操作符变量操作符constant-expression(字符串的地址)。

真正的错误可能必须在更深层次的语法分析中被捕获(即,在检查给定类型是否适合除法运算符时)。