词法分析器将 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 和其他常见编译器所做的,这证实了它是实用的选择。