$1 的非终结符没有声明的类型
$1 of nonterminal has no declared type
%{
#include<stdio.h>
%}
%start INPUT
%union {int num}
%token <num> val
%type <num>SUM
%%
INPUT: SUM
SUM: '('SUM '+' SUM')' {$$ = + }
| val {$$ = }
%%
int main(){
return yyparse();
}
我正在尝试制作一个解析器。虽然我声明了 SUM 非终结符的类型,但它给了我警告:
error: of ‘SUM’ has no declared type
SUM: '('SUM '+' SUM')' {$$ = + }
我该如何解决这个问题?
SUM: '('SUM '+' SUM')' {$$ = + }
这里的</code>是指<code>'('
,</code>是指<code>SUM
。所以当 bsion 抱怨 </code> 没有声明类型时,这意味着 <code>'('
令牌没有声明类型,这是真的。
当然,您不想将 '('
标记添加到任何内容,您想要添加两个总和。为此,您应该添加 </code> 和 <code>
.
为避免此类索引错误,您还可以考虑像这样使用 named references:
SUM: '(' SUM[left] '+' SUM[right] ')' { $$ = $left + $right; }
%{
#include<stdio.h>
%}
%start INPUT
%union {int num}
%token <num> val
%type <num>SUM
%%
INPUT: SUM
SUM: '('SUM '+' SUM')' {$$ = + }
| val {$$ = }
%%
int main(){
return yyparse();
}
我正在尝试制作一个解析器。虽然我声明了 SUM 非终结符的类型,但它给了我警告:
error: of ‘SUM’ has no declared type
SUM: '('SUM '+' SUM')' {$$ = + }
我该如何解决这个问题?
SUM: '('SUM '+' SUM')' {$$ = + }
这里的</code>是指<code>'('
,</code>是指<code>SUM
。所以当 bsion 抱怨 </code> 没有声明类型时,这意味着 <code>'('
令牌没有声明类型,这是真的。
当然,您不想将 '('
标记添加到任何内容,您想要添加两个总和。为此,您应该添加 </code> 和 <code>
.
为避免此类索引错误,您还可以考虑像这样使用 named references:
SUM: '(' SUM[left] '+' SUM[right] ')' { $$ = $left + $right; }