C90和C99的显式语法在哪里可以找到?

6

我想编写一个小型C编译器,但是似乎找不到C99的语法规则。我已经找到了C90和C99的标准文档,但是没有找到语法规则。

1个回答

9

C99标准的附录A(如维基百科所述)对我来说非常像语法。

据我记得,有一些超越语法范畴的问题需要区分typedef名称和其他标识符,这意味着不能只是将其输入yacc并期望它能正常工作,但这是您能找到的最权威的来源。


确实如此。typedef名称在定义后有效地成为关键字,但当它们超出范围时,它们停止成为关键字。这意味着您需要从符号表向解析器获取某种反馈,这是(我认为)大多数其他语言不需要的。只举一个例子:您无法解析sizeof(foo[10])而不知道foo是否为typedef。(历史上,这是因为typedef是语言的相对较晚的添加 - 在K&R之前,但在类型系统被定义之后。) - Keith Thompson
1
即使处理了typedef问题,解析可能是抽象的声明符仍然非常复杂。作为一名研究生,我为一个研究项目编写了一个C解析器,并在尝试弄清楚如何正确地完成它时,发现了每个现有实现的反例,包括当时的GCC解析器。虽然我现在无法记住任何反例或其他细节,但它们确实非常棘手。 - hmakholm left over Monica
我真是太蠢了,现在感觉很傻。至于语法的上下文敏感性,我现在打算先忽略它...我还没有写一个完整的编译器... - alexgolec
维基百科不再链接到C99标准。 - Gavin S. Yancey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接