Как разобрать C-деклараторы только с двумя токенами lookahead? - PullRequest
1 голос
/ 02 июня 2019

Глядя на https://www.lysator.liu.se/c/ANSI-C-grammar-y.html#direct-abstract-declarator, кажется, что int f((int)); можно интерпретировать как

  1. 'функция f (int)' с использованием правила '(' abstract_declarator ')' или
  2. 'function f (function (int))', использующая правило '(' parameter_type_list ')'.

Однако, когда я компилирую файл с bison, он не упоминает никаких конфликтов сдвига-уменьшения, кромеболтаться, если / еще.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]

Как правильно это проанализировать?Достаточно ли это загадочно, чтобы я мог предположить, что никто не использует эту часть языка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...