300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 使用bison编写语法分析器

使用bison编写语法分析器

时间:2022-01-06 05:42:07

相关推荐

使用bison编写语法分析器

bison yacc使用

yacc基本语法makefile后续继续添加

yacc基本语法

%{#include<stdio.h>#include<ctype.h>/*包含include*/%}/*在这里写终结符如:%token NUM%left ADD%left SUB%right NOT这里Token代表记号,left代表左结合,right代表右结合*/%%/*这里写语法规则即是grammer*/line:expr '\n'{printf("%d\n",$1);};expr:expr '+' term{$$=$1+$3;}|term{$$=$1;};term: term '*' factor{$$=$1*$3;}| factor{$$=$1;};factor: '(' expr ')'{$$=$2;}|NUM{$$=$1;};DIGIT:'0'{$$=0;}|'1'{$$=1;}|'2'{$$=2;}|'3'{$$=3;}|'4'{$$=4;}|'5'{$$=5;}|'6'{$$=6;}|'7'{$$=7;}|'8'{$$=8;}|'9'{$$=9;}POS_DIGIT:'1'{$$=1;}|'2'{$$=2;}|'3'{$$=3;}|'4'{$$=4;}|'5'{$$=5;}|'6'{$$=6;}|'7'{$$=7;}|'8'{$$=8;}|'9'{$$=9;}NUM:DIGIT{$$=$1;}|POS_DIGIT NUM{int len=1,tmp=$2;while(tmp){tmp/=10;len*=10;}$$=$1*len+$2;}%%/*这里写一些函数*/main(){return yyparse();}int yylex(void){return getchar();}void yyerror(char *s){printf("%s\n",s);}

makefile

CFLAGS = -g -Wall -ansi -pedanticminil: mini_l.lex final.ybison -d -v final.yflex mini_l.lexgcc lex.yy.c final.tab.c -lfl -o minil1rm -f lex.yy.c

bison -d -v final.y代表使用.y文件生成c语言代码.

flex mini_l.lex表示编译lex文件。

gcc表示编译c语言文件为可执行文件。

后续继续添加

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。