Types BISON/FLEX C-Basic未声明类型错误

Types BISON/FLEX C-Basic未声明类型错误,types,compiler-errors,bison,Types,Compiler Errors,Bison,我在这个flex bison项目上遇到了麻烦,我不明白为什么我一直收到这个错误“没有声明类型” 我的flex文件 %token T_COM %type <codigo> ficheiro %type <codigo> idents %type <codigo> comentario %type <codigo> def_consts def_const def_vars def_var %type <codigo> def_fun

我在这个flex bison项目上遇到了麻烦,我不明白为什么我一直收到这个错误“没有声明类型”

我的flex文件

%token T_COM



%type <codigo> ficheiro
%type <codigo> idents
%type <codigo> comentario
%type <codigo> def_consts def_const def_vars def_var
%type <codigo> def_function tipo main bloco blocoSemMAin
%type <codigo> statements statement statementsSemMain
%type <codigo> valores_const valor_const expr

%type <i> const_integer_expr
%type <d> const_real_expr
%type <i> const_boolean_expr
%type <s> const_string_expr


%%

ficheiro
:   def_vars def_function                       { printf( "%s %s\n",$1, $2); }
|   def_vars                                    { printf( "%s\n",$1); }
|   def_function                                { printf( "%s\n", $1 );}
|   comentario                                  { printf( "%s\n", $1 );}
;

comentario
:   T_COM                                                   { sprintf( $$,"REM %s ",$1);}
;
上面写着:pascal.y:172.85-86:$1的“comentario”没有声明类型

PS-我只是复制了与错误相关的部分代码,其余部分似乎工作正常


谢谢:)

终端
T\u COM
$1
在该产品中)当然没有声明类型。此外,尽管bison看不见它,但扫描仪在返回
T_COM
时从不设置
yylval
的任何成员,因此可以公平地说,终端确实没有语义值

使用
$1
作为与
%s
格式对应的
printf
的参数,表明您希望它具有字符串类型。如果是这样,您需要将类型标记添加到
%token
声明中,并确保在扫描仪中设置了
yylval
的相应成员

%token
声明如下所示:

%token <s> T_COM
%token T\u COM

假设在
%union
声明中,标记
s
引用一个类似字符串的对象。(虽然看你的代码,它似乎同样可能是
codigo
标记。)

那么你建议我如何在我的flex文件上声明“/*”([^*]|[]+[^/])*[]+[/]{return T_COM;}@user3743144:你不需要在flex文件中声明任何东西。但你需要提供一个价值。如何处理字符串常量。。。我在答案中添加了如何声明
T_COM
的类型,但这也将与字符串常量相同。它现在起作用了。我有另一个问题,我编译了,但没有打印任何内容?我错过了什么?我怎么能从flex转到bise(comentary)而不是*/???
:   T_COM                                                   { sprintf( $$,"REM %s ",$1);}
%token <s> T_COM