อ.ให้เขียน compiler มาตัวหนึ่งโดยต่อยอดจาดของอ. ของอ.รับค่าได้ บวกลบคูณหารได้ ฉันเลยต่อยอดเป็นหาค่าเฉลี่ย อ.ให้ใช้ bison กับ flex แต่ห้ามเชื่อมโยงกับภาษาซี ให้เขียน Grammar ขึ้นมาให้ ฉันจนปัญญาแล้ว แทรกโค้ดเข้าไปนิดนึงก้ error ไม่รู้จะทำไงดี ข้างล่างเป็นโค้ดที่อ.ให้เอามาต่อยอด ถามเพื่อนๆที่เรียนก้ไม่ค่อยใครทำได้
รบกวนท่านผู้รู้ช่วยฉันหน่อยนะคะ ขอขอบคุณเป็นอย่างสูงมา ณ ที่นี้ค่ะ
%{
#include "var.tab.h"
%}
%%
[0-9]+ { yylval.val = atof(yytext);
return NUMBER;
}
[a-z] { yylval.varNo = yytext[0] - 'a';
return ID;
}
"END" { return EN; }
[ \t] ;
\n|. return yytext[0];
เป็น ไฟล์ var.l
%union {
double val;
int varNo;
}
%token <val> NUMBER
%token EN
%token <varNo> ID
%type <val> expression
%left '+' '-'
%left '*' '/'
%%
statementList: statement '\n'
| statementList statement '\n'
;
statement: ID '=' expression { varTable[$1] = $3;
printf("%c=%f\n", 'a' + $1, $3); }
| EN { printf("Exit \n" ); exit (0);}
;
expression: expression '+' expression { $$ = $1 + $3; }
| expression '-' expression { $$ = $1 - $3; }
| expression '*' expression { $$ = $1 * $3; }
| expression '/' expression { $$ = $1 / $3; }
| '(' expression ')' { $$ = $2; }
| NUMBER { $$ = $1; }
| ID { $$ = varTable[$1]; }
;
%%
main()
{
yyparse();
}
ส่วนนี้เป็นของ var.y ค่ะ
ปล. พึ่งเคยตั้งกระทู้เป็นครั้งแรกเลยไม่รู้จะแท็กห้องไหนดี ขออภัยถ้าแท็กห้องผิด
โปรเจ็ค compiler ครับ
รบกวนท่านผู้รู้ช่วยฉันหน่อยนะคะ ขอขอบคุณเป็นอย่างสูงมา ณ ที่นี้ค่ะ
%{
#include "var.tab.h"
%}
%%
[0-9]+ { yylval.val = atof(yytext);
return NUMBER;
}
[a-z] { yylval.varNo = yytext[0] - 'a';
return ID;
}
"END" { return EN; }
[ \t] ;
\n|. return yytext[0];
เป็น ไฟล์ var.l
%union {
double val;
int varNo;
}
%token <val> NUMBER
%token EN
%token <varNo> ID
%type <val> expression
%left '+' '-'
%left '*' '/'
%%
statementList: statement '\n'
| statementList statement '\n'
;
statement: ID '=' expression { varTable[$1] = $3;
printf("%c=%f\n", 'a' + $1, $3); }
| EN { printf("Exit \n" ); exit (0);}
;
expression: expression '+' expression { $$ = $1 + $3; }
| expression '-' expression { $$ = $1 - $3; }
| expression '*' expression { $$ = $1 * $3; }
| expression '/' expression { $$ = $1 / $3; }
| '(' expression ')' { $$ = $2; }
| NUMBER { $$ = $1; }
| ID { $$ = varTable[$1]; }
;
%%
main()
{
yyparse();
}
ส่วนนี้เป็นของ var.y ค่ะ
ปล. พึ่งเคยตั้งกระทู้เป็นครั้งแรกเลยไม่รู้จะแท็กห้องไหนดี ขออภัยถ้าแท็กห้องผิด