我想解析代碼,並且爲此我寫了LEX和YACC文件,它將在下面給出。第一行它正確讀取,但之後,它給語法錯誤,它不讀下一行,我應該修改輸入和輸出函數,我正在從文件讀取和寫入我的輸出在一個文件.....我只是開始使用LEX YACC,需要一些想法。在LEX中讀取新行給出語法錯誤YACC
輸入文件
b_7 = _6 + b_3;
a_8 = b_7 - c_5;
法文件
%{
/*
parser for ssa;
*/
#include<stdio.h>
#include<stdlib.h>
#include"y.tab.h"
%}
%%
[\t]+ ;
\n ;
[if]+ printf("first input\n");
[else]+ return(op);
[=]+ return(equal);
[+]+ return(op);
[*]+ return(op);
[-]+ return(op);
[\<][b][b][ ]+[1-9][\>] {return(bblock);}
([[_][a-z]])|([a-z][_][0-9]+)|([0-9]+) {return(var);}
. ;
%%
YACC文件
%{
/* lexer for ssa gramer to use for recognizing operations*/
#include<stdio.h>
char add_graph(char,char,...);
%}
%token opif opelse equal op bblock var
%%
sentence: var equal var op var { add_graph($1,$2,$3,$4,$5);}
;
%%
extern FILE *yyin;
main(argc,argv)
int argc;
char **argv;
{
if(argc > 1) {
FILE *file;
file=fopen(argv[1],"r");
if(file==NULL) {
fprintf(stderr,"couldnot open%s\n",argv[0]);
exit(1);
}
yyin=file;
}
do
{
yyparse();
}while (!feof(yyin));
fclose(yyin);
}
char add_graph(something)
{
.....
.....
}
yyerror(s)
char *s;
{
fprintf(stderr,"%s there is error\n",s);
}
yywrap()
{
printf("the output");
}
是的大衛,我已經寫你的代碼,我已經添加了一個更多的行文件克里克告訴和它的作品「;」 ; – user2987223