我一直在尋找我的問題的答案,但沒有人解決我的問題。編譯非常簡單的Lex/Yacc文件時出錯
這是我非常簡單的Yacc文件:
%{
#include <stdio.h>
#include "y.tab.h"
int clientesVodafone = 0;
int clientesMovistar = 0;
float sumaVodafone = 0.0;
float sumaMovistar = 0.0;
%}
%union {
int t0;
float cm;
};
%token NUMEROTELEFONO OPERADORA SERVICIO COSTEMENSAJE
%type <t0> OPERADORA
%type <cm> COSTEMENSAJE
%start fichero
%%
ServicioSMS: NUMEROTELEFONO OPERADORA SERVICIO COSTEMENSAJE {
if ($2.t0 == 0) {
clientesMovistar++;
sumaMovistar += $4.cm;
} else {
clientesVodafone++;
sumaVodafone += $4.cm;
}
}
fichero: ServicioSMS
fichero: fichero ServicioSMS
%%
int main(void) {
yyparse();
printf("%i clientes de VODAFONE con coste %f euros.",
clientesVodafone, sumaVodafone);
printf("%i clientes de MOVISTAR con coste %f euros.",
clientesMovistar, sumaMovistar);
}
這是我萊克斯文件:
%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
6[0-9]{8} {return NUMEROTELEFONO;}
MOVISTAR {yylval.t0 = 0; return OPERADORA;}
VODAFONE {yylval.t0 = 1; return OPERADORA;}
[0-9]+s {return SERVICIO;}
[0-9]*\.[0-9]+ {yylval.cm = atof(yytext); return COSTEMENSAJE;}
%%
當我編譯,我得到了著名的錯誤信息:「錯誤:請求成員't0'的東西不是一個結構或聯盟「。我也獲得與成員'cm'相同的錯誤。他們相關的對yyparse(),在線路:
if ($2.t0 == 0) {
clientesMovistar++;
sumaMovistar += $4.cm;
} else {
clientesVodafone++;
sumaVodafone += $4.cm;
}
我用野牛和Flex與編譯: 「野牛-d -y example.y」, 「柔性example.l」 和「海灣合作委員會法。 yy.c y.tab.c -ll -lm「。
謝謝。
謝謝!我還有一個錯誤,因爲我沒有寫'yyerror'函數。我已經添加了它,現在...它的工作原理! – baister