Bison和Flex Header指令错误

时间:2016-11-01 05:14:59

标签: bison flex-lexer

我遇到此问题"%标头不是有效指令"。

这是.y:

    %header{

#include "yystype.h"
#include<stdio.h> 
#include"analex.h" 
extern int yylex(void);
extern char *yytext;
extern int linea;
extern FILE *yyin;
void yyerror(const char *);
%}

%token ESCRIBIR 
%token <valor> NUMERO 
%type <valor> expr term fact

%define PURE 
%define STYPE YY_parse_STYPE 
%%

entrada : instrucciones 
;
instrucciones : instruccion | instrucciones instruccion 
;
instruccion : escritura 
;
escritura : ESCRIBIR '(' expr ')' ';' 
{printf("La expresion vale: %i\n",$3);} 
;
expr : expr '+' term 
{$$ = $1+$3;} 
| expr '-' term 
{$$ = $1-$3;} 
| term {$$ = $1;} 
;

term : term '*' fact 
{$$=$1*$3;}
| term '/' fact 
{$$ = $1/$3;} 
| fact 
{$$=$1;} 
;
fact : '(' expr ')' 
{$$=$2;} 
| NUMERO 
{$$=$1;} 
; 
%% 
void yyerror(char *s) 
{ 
printf("ERROR: (%s)\n",yytext); 
} 

.l

%header{ 
#include "yystype.h" 
%} 
%{ 
#include <stdlib.h> 
#include "anasint.h" 
%}
letra [A-Za-z] 
digito [0-9] 
numero {digito}+ 
blanco [ \t\n]
%define LEX_PARAM YY_parse_STYPE *yylval
%% 
{blanco}* {;} 
{numero} {yylval->valor=atoi(yytext); return(NUMERO);} 
escribir {return(ESCRIBIR);} 
. {return(yytext[0]);} 
%% 

和yystype.h

#ifndef _YYSTYPE_H 
#define _YYSTYPE_H 
typedef union{ 
int valor;} YY_parse_STYPE; 
#endif 

如果有人知道这里的错误是什么,请随时告诉我。野牛版本是2.4.1和flex 2.5

1 个答案:

答案 0 :(得分:1)

我认为你收到消息的原因是:

  

“%标头不是有效的指令”。

是因为“%标头不是有效指令”。

检查flexbison的手册我看到没有描述%Header指令。它不在手册中,无效。

如果您删除文字header以便%{,则您将无法再收到该消息。

我很困惑你为什么认为可能有一个;那些信息来自哪里......