加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

bison没有创建tab.h文件

发布时间:2020-12-15 01:48:33 所属栏目:百科 来源:网络整理
导读:我是flex和bison的新手,我现在已经在这个项目上工作了几天.我有一个以前工作正常的野牛文件,我稍微更改了一下,现在它没有创建一个tab.h文件…我已将错误和我的野牛和flex文件放在下面…… ??错误: In file included from stojk_3_2.y:55: stojkovic_project
我是flex和bison的新手,我现在已经在这个项目上工作了几天.我有一个以前工作正常的野牛文件,我稍微更改了一下,现在它没有创建一个tab.h文件…我已将错误和我的野牛和flex文件放在下面……
??错误:

In file included from stojk_3_2.y:55:
  stojkovic_project1_2.l:4:27: error: stojk_3_2.tab.h: No such file or directory
  stojk_3_2.tab.c: In function ‘int yyparse()’:
  stojk_3_2.tab.c:1416: warning: deprecated conversion from string constant to ‘char*’
  stojk_3_2.tab.c:1562: warning: deprecated conversion from string constant to ‘char*’

.y文件:

%{
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define YYSTYPE double

int yylex(void);

static
void yyerror(char *s)
{
printf("yyerror: %sn",s);
}

%}

%token PLUS
%token MINUS
%token MULT
%token DIVIDE

%token LPAREN
%token RPAREN

%token UNSIGNEDINTEGER

%left PLUS MINUS
%left MULT DIVIDE

%token Variable
%token Exp
%token Sign
%token Unsigned_int
%token Unsigned_float_int
%token Factor

%%

lines     :         lines expr   'n'         {printf("%gn",$2);}
|         lines 'n'
|         /*empty*/
;

expr      :          expr PLUS  expr           {$$ =  $1  +  $3;}  
|          expr MINUS  expr           {$$ =  $1  -  $3;} 
|          expr MULT  expr           {$$ =  $1  *  $3;} 
|          expr DIVIDE  expr           {$$ =  $1  /  $3;} 
|          LPAREN  expr  RPAREN        {$$=  $2;}
|          UNSIGNEDINTEGER
;

%%

#include  "lex.yy.c"

int yylex(void);
int yyparse(void);

int main(void)
{
return yyparse();
}

.l文件

/*** Definition section ***/
%{

#include "stojk_3_2.tab.h"
%}


Variable                    [a-zA-Z_]+[a-zA-Z0-9_]*
Digit                       [0-9]
Digits                      [0-9]*
Sign                        [+]|[-]
Exp                         [E]+{Sign}|[e]+{Sign}
Unsigned_int                {Digit}|{Digits}
Unsigned_float_int          ({Digit}|{Digits}+[.]+{Digit}|{Digits})({Digit}|    {Digits}+[.]+{Digit}|{Digits}+{Exp}+{Digit}|{Digits})
Factor                      {Variable}|{Unsigned_int}|    {Unsigned_float_int}  




%{
/* C code to be copied verbatim */
#include <stdio.h>

%}

/* This tells flex to read only one input file */
%option noyywrap

%%
    /*** Rules section ***/

    /* [0-9]+ matches a string of one or more digits */

{Variable}   {  return Variable; }

{Exp}   {return Exp; }
{Sign}   { return Sign; }

{Unsigned_int}   {  return Unsigned_int; }
{Unsigned_float_int}  { return Unsigned_float_int; }
{Factor}               {  return Factor; }









.|n    {   /* Ignore all other characters. */   }

%%

解决方法

试试跑步

bison -d blah.y

这将使它生成.h文件

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读