词法分析器将5abc识别为什么样的令牌?还是错误?

时间:2016-08-06 04:47:03

标签: compiler-errors compiler-construction lexical-analysis

int main()
{
    int a,b,c;
    5abc=20;
}

5abc被识别为令牌吗? 如果是,那么你会把它放在哪个类别?

如果否,则表示谁正在识别Lexical或Syntax分析器的错误? 请解释一下。

1 个答案:

答案 0 :(得分:2)

您的问题不明确,但似乎您正在编写自己的编译器/词法分析器,并询问它是处理此错误的最佳方法。您可能一直在询问现有编译器如何处理这种情况,但这很容易找到。只需编译它:

$ gcc SO.c
SO.c:4:5: error: invalid suffix "abc" on integer constant

没有正确答案;你可以使它成为一个词法错误,但是你必须添加一个词法规则来匹配这个特定的情况,然后将一个错误令牌返回给解析器,这会导致语法错误。或者,您可以返回一个数字/整数,后跟一个标识符,这也会产生语法错误。通常,返回看到的标记更容易,让解析器将其作为语法错误处理。您可以看到 gcc 和其他常见编译器所做的事情,这证实了它是务实的选择。