应该如何解析`int f((int));`?

时间:2019-06-01 21:49:18

标签: c parsing compiler-construction

看着https://www.lysator.liu.se/c/ANSI-C-grammar-y.html#direct-abstract-declarator,看来int f((int));可以解释为

  1. 使用'(' abstract_declarator ')'规则或
  2. 的“函数f(int)”
  3. 使用'(' 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]

解析此内容的正确方法是什么?这足够神秘吗,我应该假设没有人使用这部分语言?

0 个答案:

没有答案