词法分析器将 5abc 识别为什么样的标记?还是错误?
Lexical analyser recognize 5abc as what kind of token ? or a error?
int main()
{
int a,b,c;
5abc=20;
}
5abc
是否被识别为token?
如果是,那么您会把它归入哪个类别?
如果否,那么词法或句法分析器是谁在识别这个错误?
请解释。
您的问题不清楚,但您似乎正在编写自己的 compiler/lexical 分析器,并询问处理此错误的最佳方法是什么。您可能一直在问现有的编译器如何处理这种情况,但这很容易找到。编译一下:
$ gcc SO.c
SO.c:4:5: error: invalid suffix "abc" on integer constant
没有正确答案;你可以让它成为一个词法错误,但是你必须添加一个词法规则来匹配这个特定的情况,然后 return 一个错误标记给解析器,这将导致语法错误。或者,您可以只 return 一个 digit/integer 后跟一个标识符,这也会产生语法错误。通常 return 看到的标记并让解析器将其作为语法错误处理会更容易。你可以看到这就是 gcc 和其他常见编译器所做的,这证实了它是实用的选择。
int main()
{
int a,b,c;
5abc=20;
}
5abc
是否被识别为token?
如果是,那么您会把它归入哪个类别?
如果否,那么词法或句法分析器是谁在识别这个错误? 请解释。
您的问题不清楚,但您似乎正在编写自己的 compiler/lexical 分析器,并询问处理此错误的最佳方法是什么。您可能一直在问现有的编译器如何处理这种情况,但这很容易找到。编译一下:
$ gcc SO.c
SO.c:4:5: error: invalid suffix "abc" on integer constant
没有正确答案;你可以让它成为一个词法错误,但是你必须添加一个词法规则来匹配这个特定的情况,然后 return 一个错误标记给解析器,这将导致语法错误。或者,您可以只 return 一个 digit/integer 后跟一个标识符,这也会产生语法错误。通常 return 看到的标记并让解析器将其作为语法错误处理会更容易。你可以看到这就是 gcc 和其他常见编译器所做的,这证实了它是实用的选择。