下面的变量声明会导致词法错误还是语法错误?
Will the below declaration of the variable lead to lexical error or syntactical error?
如果我像这样声明变量
int a/*comment*/ ; //This does not give any error .
int a/*comment*/bc; This gives error
现在我不明白这背后的原因,根据我的说法,当字符 a 在该符号 / 被读取后第一次被读取时,它是否切换到 DFA 的其他状态以识别其他一些模式因此没有错误,而在第二种情况下,在读取评论后它发现一些其他序列不属于正式模式因此它在有限自动机的某些非最终状态中停止,因此它给出错误。
请消除这个困惑。
在预处理过程中,注释被替换为单个空格。
您的代码变为:
int a bc;
C11 标准第 5.1.1.2 节 "Translation phases",第 3 阶段:
...Each comment is replaced by one space character. ...
注释在(嗯,just before)C 编译的预处理阶段被替换。这是在 "real" 解析发生之前。因此,在 C 语言的主要部分中,注释被认为等同于空白。
根据 C 标准(5.1.1.2 翻译阶段)
3. ...Each comment is replaced by one space character.
因此这一行
int a/*comment*/bc;
翻译阶段后相当于
int a bc;
但是你可以这样写:)
int a\
bc;
前提是bc;
从下一行的第一个位置开始。
如果我像这样声明变量
int a/*comment*/ ; //This does not give any error .
int a/*comment*/bc; This gives error
现在我不明白这背后的原因,根据我的说法,当字符 a 在该符号 / 被读取后第一次被读取时,它是否切换到 DFA 的其他状态以识别其他一些模式因此没有错误,而在第二种情况下,在读取评论后它发现一些其他序列不属于正式模式因此它在有限自动机的某些非最终状态中停止,因此它给出错误。
请消除这个困惑。
在预处理过程中,注释被替换为单个空格。
您的代码变为:
int a bc;
C11 标准第 5.1.1.2 节 "Translation phases",第 3 阶段:
...Each comment is replaced by one space character. ...
注释在(嗯,just before)C 编译的预处理阶段被替换。这是在 "real" 解析发生之前。因此,在 C 语言的主要部分中,注释被认为等同于空白。
根据 C 标准(5.1.1.2 翻译阶段)
3. ...Each comment is replaced by one space character.
因此这一行
int a/*comment*/bc;
翻译阶段后相当于
int a bc;
但是你可以这样写:)
int a\
bc;
前提是bc;
从下一行的第一个位置开始。