Posted on 2010-09-20 15:30
Prayer 閱讀(2639)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
C/C++
聽說Yacc很久了,今天下下來試了一下,下載地址
httpwww.monmouth.com~wstreettlex-yacclex-yacc.html 是gnu的開源項(xiàng)目,用C實(shí)現(xiàn)的,有源碼,并且基于Windows的
注意,除了下bison.exe, flex.exe還要下載bison.simple文件并將其與bison.exe放于同一目錄下,
下面進(jìn)行簡(jiǎn)單的測(cè)試:
1. 在放置bison.exe的目錄下新建一個(gè)文件test.y(擴(kuò)展名是y), 并在其中加入以下內(nèi)容:
%{
#include ctype.h
%}
%token NUMBER
%left '+' '-'
%%
line expression 'n' {printf( %dn, $1 ); }
expression expression '+' expression { $$ = $1 + $3; }
expression '-' expression { $$ = $1 - $3; }
'(' expression ')' { $$ = $2; }
NUMBER { $$ = $1; }
;
%%
yylex() {
int c;
c = getchar();
if ( isdigit( c ) ) {
yylval = c - '0';
return NUMBER;
}
return( c );
}
保存后,進(jìn)入Dos命令行,進(jìn)入相應(yīng)目錄后敲入bison test.y后回車,目錄下會(huì)多一個(gè)test_tab.c文件,
這個(gè)便是bison自動(dòng)生成的解釋器的代碼,不過還要自己加點(diǎn)代碼
打開在文件最后加入以下代碼:
main()
{
yyparse();
}
yyerror(char msg)
{
printf(error %s encounteredn, msg);
}
可
以自己設(shè)計(jì)的,這里只是給出最簡(jiǎn)單的例子,加入上述代碼后將test_tab.c文件進(jìn)行編譯,如果沒錯(cuò)的話就會(huì)生成一個(gè)test_tab.exe文件,
在Dos命令行下敲入test_tab后回車會(huì)出現(xiàn)一個(gè)空行,敲入3+4(不要加空格)后回車,將會(huì)出現(xiàn)結(jié)果7,再敲回車會(huì)報(bào)錯(cuò)并退出,這就完成了一個(gè)簡(jiǎn)
單的解釋器。
參考網(wǎng)站:httpdinosaur.compilertools.net
簡(jiǎn)單試驗(yàn)了一下Yacc和Lex,今后再慢慢研究一下它的語(yǔ)法和源代碼!