我正在为练习1-24,K& R2编写代码,它要求编写一个基本的语法调试器。
我制作了一个解析器,状态正常,dquote,squote等......
所以我想知道是否有像
这样的代码片段/" text "
代码中是否允许?我应该将此报告为错误吗? (问题是我的解析器在/
之后进入comment_entry状态并忽略"
。)
答案 0 :(得分:3)
由于单个/
仅表示除法,因此不应将其解释为注释。没有为字符串定义除法运算符,因此像"abc"/"def"
这样的东西没有多大意义,但它不应该是语法错误。确定是否可以进行这种划分不应该由解析器完成,而是留待编译的后续阶段在那里决定。
答案 1 :(得分:2)
这在语法上是有效的,但不是语义上的。它应该解析为除法运算符后跟一个字符串文字。你不能用字符串文字来划分东西,所以整体来说它不是合法的代码。
评论以两个字符的标记/*
开头,以*/
结尾。
答案 2 :(得分:0)
作为一个独立的语法元素,应该将其报告为错误。
理论上(作为表达式的一部分)可以编写
a= b /"text"; / a = b divided through address of string literal "text"
这也是错误的(你不能通过指针划分)。
但是在表面上似乎没问题,因为它会在语法上解码为:变量操作符变量操作符constant-expression(字符串的地址)。
真正的错误可能必须在更深层次的语法分析中被捕获(即,在检查给定类型是否适合除法运算符时)。