2016-11-01 9 views
0

"%Header is not valid directive"という問題が発生しています。BisonとFlexヘッダーの指示エラー

これは.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であり、私はあなたがメッセージを取得している理由だと思う2.5

答えて

1

を曲げる:

は「%ヘッダーが有効なディレクティブではありません」。

"%ヘッダーは有効な指令ではありません"ためですか?

flexおよびbisonのマニュアルを確認しています。%Headerの説明を参照してください。マニュアルには記載されていませんが、無効です。

headerのテキストを削除して%{にすると、メッセージは表示されなくなります。

私はあなたがなぜそこにあるかもしれないと思ったのか困惑しています。その情報はどこから来たのですか。

+0

これはバイソンのものです。++、私は信じています。そしておそらく他のいくつかのフォーク – rici

+0

これは本から来ています。 .yファイル私は教師が私に与えた本からそれを得た、私はちょうどコードをコピー/ペーストする、私は本がそれのように実行されると述べたので何も変更していない。私はこれをチェックします、どうもありがとうございます。 –