加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

bison和flex的例子

发布时间:2020-12-15 04:48:05 所属栏目:百科 来源:网络整理
导读:parser.l: %{ #include stdio.h int yylex(void); void yyerror(char *);%}%token INTEGER%%program: program expr 'n' { printf("%dn",$2); } | ;expr: INTEGER { $$ = $1; } | expr '+' expr { $$ = $1 + $3; } | expr '-' expr { $$ = $1 - $3; } ;%%vo

parser.l:

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


%token INTEGER

%%

program:
        program expr 'n'         { printf("%dn",$2); }
        |
        ;

expr:
        INTEGER                   { $$ = $1; }
        | expr '+' expr           { $$ = $1 + $3; }
        | expr '-' expr           { $$ = $1 - $3; }
        ;

%%

void yyerror(char *s) {
    fprintf(stderr,"%sn",s);
}

int main(void) {
    yyparse();
    return 0;
}
scanner.l

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

%%

[0-9]+      {
                yylval = atoi(yytext);
                return INTEGER;
            }

[-+n]      return *yytext;

[ t]       ; /* skip whitespace */

.           yyerror("invalid character");

%%

这个编译器实现简单的加减,不支持括号。

编译:

bison -y -d parser.l
flex scanner.l
gcc -c y.tab.c lex.yy.c
gcc y.tab.o lex.yy.o -o plusmins.exe

以下是运行例:

[jialiang@host tmp]$ ./plusminis.exe
2+3
5
3+3+3-1
8

d
invalid character
syntax error

refs: http://epaperpress.com/lexandyacc/pry1.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读