如何只使用两个lookahead标记来解析C声明器?
看,好像是(code)intf(int),代码>可以解释为如何只使用两个lookahead标记来解析C声明器?,c,parsing,compiler-construction,C,Parsing,Compiler Construction,看,好像是(code)intf(int),可以解释为 “函数f(int)”“使用”(“抽象声明器”)”规则或 “函数f(函数(int))”使用“(“参数类型列表”)”规则 但是,当我用bison编译文件时,除了悬挂的if/else之外,它没有提到任何shift-reduce冲突cdecl只是说“语法错误”。GCC和Clang似乎将其解析为2: $ gcc -x c - -o /dev/stdout -S "$@" int f((int)); <stdin>:1:7: error: e
”(“抽象声明器”)”
规则或“(“参数类型列表”)”
规则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]
$gcc-xc--o/dev/stdout-S“$@”
intf((int));
:1:7:错误:应为声明说明符或“(”标记)之前的“…”
$clang-xc--o/dev/stdout-S“$@”
intf((int));
:1:8:警告:缺少类型说明符,默认为“int”[-Wimplicit int]
正确的解析方法是什么?这足够神秘吗?我应该假设没有人在使用语言的这一部分吗?看看
参数列表的语法。它要求每个参数都有声明说明符和一个声明符。'('abstract\u declarator')
和'(“参数类型列表”)“
都是声明符,但声明说明符在哪里?
啊,我不知道在声明说明符周围不能有括号。所以整个事情都是无效语法。谢谢!相关:@Broman处理表达式和运算符优先级,我的问题是关于声明的。@HolyBlackCat:不应该吗首先是答案?查看参数列表的语法。它要求每个参数都有声明说明符和声明符。(“抽象声明符”)
和(“参数类型列表”)“
都是声明符,但声明说明符在哪里?
啊,我不知道在声明说明符周围不能有括号。所以整个事情都是无效语法。谢谢!相关:@Broman处理表达式和运算符优先级,我的问题是关于声明的。@HolyBlackCat:不应该吗至少可以回答吗?