看着https://www.lysator.liu.se/c/ANSI-C-grammar-y.html#direct-abstract-declarator,看来int f((int));
可以解释为
'(' abstract_declarator ')'
规则或'(' parameter_type_list ')'
规则的'function f(function(int))'。但是,当我用bison
编译文件时,除了悬空的if / else之外,它没有提到任何shift-reduce冲突。 cdecl
只是说“语法错误”。 GCC和Clang似乎将其解析为2:
$ gcc -x c - -o /dev/stdout -S "$@"
int f((int));
<stdin>:1:7: error: expected declaration specifiers or '...' before '(' token
$ clang -x c - -o /dev/stdout -S "$@"
int f((int));
<stdin>:1:8: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
解析此内容的正确方法是什么?这足够神秘吗,我应该假设没有人使用这部分语言?