Types BISON/FLEX C-Basic未声明类型错误
我在这个flex bison项目上遇到了麻烦,我不明白为什么我一直收到这个错误“没有声明类型” 我的flex文件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
%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