PDA

View Full Version : سوال: عدم دریافت خروجی در yacc



emadsmart
پنج شنبه 03 اردیبهشت 1394, 22:56 عصر
با عرض سلام و خسته نباشید خدمت دوستان محترم
من یک قطعه کد برای lexx نوشتم به شکل زیر:

%{
#include <stdio.h>
int yylex(void);
void yyerror(char *);
%}


%%
[ \t (if) {return IF_TOKEN ;}
(else) {return ELSE_TOKEN ;}
(while) {return WHILE_TOKEN ;}
(FOR) {return FOR_TOKEN ;}
(BREAK) {return BREAK_TOKEN ;}
(float) {return FLOAT_TOKEN ;}
(int) {return INT_TOKEN ;}
(long) {return LONG_TOKEN ;}
(return) {return RETURN_TOKEN ;}
(defFunction) {return DEFFUNCTION_TOKEN ;}
(defClass) {return DEFCLASS_TOKEN ;}
(\() {return PAROPEN_TOKEN ;}
(\)) {return PARCLOS_TOKEN ;}
(\{) {return CBROPEN_TOKEN ;}
(\}) {return CBRCLOS_TOKEN ;}
(<) {return LESSTHN_TOKEN ;}
(>) {return GRTRTHN_TOKEN ;}
(=) {return EQUALTO_TOKEN ;}
(!=) {return NEQUALTO_TOKEN ;}
(\+) {return SUM_TOKEN ;}
(-) {return MINUS_TOKEN ;}
(\*) {return STAR_TOKEN ;}
(\/) {return SLASH_TOKEN ;}
(%) {return REMAIN_TOKEN ;}
(\[) {return BRAOPEN_TOKEN ;}
(\]) {return BRACLOS_TOKEN ;}
(";") {return SEMICOL_TOKEN ;}
([A-Za-z&_$][A-Za-z$_0-9]*) {return ID ;}
(0|[-]?[1-9][0-9]*) {return NUMBER ;}


. {return ERROR ;}


%%
int yywrap (void) {
return 1;
}
int main (int argc, char** argv) {
yylex();
return 0;
}





و یک قطعه کد هم برای فایل yacc به این شکل:


%{
#include <stdio.h>
#include "y.tab.h"
int yylex(void) ;
void yyerror(char *);
%}


%token NUMBER


%%
program : expr { printf("\nProgram Accepted!!!\n"); };
expr : NUMBER ;
%%


در آخر میرم و توی ترمینال میزنم yacc example.y که ی پیغام خطا میده:
parser name defined to default :"parse"
و بر خلاف فایل lex که اجازه میداد تا من بهش ی ورودی بدم و بعدش میگفت با کودوم یکی از الگو های من منطبق شده، این جا اصلا اجازه ورود ورودی هم نمیده
میخواستم از دوستان کمک بگیرم
چیکار باید بکنم که بتونم ورودی بدم؟
پ.ن:
فایل yacc فعلا کامل نشده چون همین اول کاری نمیدونستم چه باید بکنم وگرنه کامل تر از این حرفا خواهد شد.