Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

听说Yacc很久了,今天下下来试了一下,下载地址
httpwww.monmouth.com~wstreettlex-yacclex-yacc.html 是gnu的开源项目,用C实现的,有源码,并且基于Windows的
注意,除了下bison.exe, flex.exe还要下载bison.simple文件并将其与bison.exe放于同一目录下,
下面进行简单的测试:

1. 在放置bison.exe的目录下新建一个文件test.y(扩展名是y), 并在其中加入以下内容:
%{
 #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 );
 }

保存后,进入Dos命令行,进入相应目录后敲入bison test.y后回车,目录下会多一个test_tab.c文件,
这个便是bison自动生成的解释器的代码,不过还要自己加点代码
打开在文件最后加入以下代码:
main()
{
     yyparse();
}

yyerror(char msg)
{
    printf(error %s encounteredn, msg);
}
可 以自己设计的,这里只是给出最简单的例子,加入上述代码后将test_tab.c文件进行编译,如果没错的话就会生成一个test_tab.exe文件, 在Dos命令行下敲入test_tab后回车会出现一个空行,敲入3+4(不要加空格)后回车,将会出现结果7,再敲回车会报错并退出,这就完成了一个简 单的解释器。
参考网站:httpdinosaur.compilertools.net
简单试验了一下Yacc和Lex,今后再慢慢研究一下它的语法和源代码!


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理