欢迎来到天天文库
浏览记录
ID:21257324
大小:38.00 KB
页数:8页
时间:2018-10-20
《使用lex+yacc地地分析simple语言》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、使用lex yacc分析simple语言简单语句(2007-03-1818:01:07)转载 关于lex和yacc的理论知识大家可以从网上搜到一些,比较好的资料是机械工业出版社《lex与yacc》中文第二版,当然也可以从网上下到电子版看一看,这里就不赘述了。 下面介绍一个简单的算术表达式和变量说明语句的lex和yacc程序:LEX程序部分:%{//头文件,全局变量定义#include"myparser.h"#include#include#include
2、 intc;externintyylval;%}///////////////////////////////////////////////////////////////declarationssection说明部分可以为空//placeanydeclarationshere%%////////////////////////////////////////////////////////////rulessection 规则部分不可或缺//placeyourLexru
3、leshere/***********************空格,关键字的识别*********************/// return语句返回token标记yacc进行语法识别"" ;var {printf("%10sKEY_var ",yytext);return(VAR);}real {printf("%10sKEY_real ",yytext);return(REAL);}integer {printf("%10sKEY_inte
4、ger ",yytext);return(INTEGER);}char {printf("%10sKEY_char ",yytext);return(CHAR);}bool {printf("%10sKEY_bool ",yytext);return(BOOL);}/*************************界线符的识别************************/: {printf("%10sSYM_colon ",yy
5、text);return(COLON);}, {printf("%10sSYM_comma ",yytext);return(COMMA);}/*************************标志符的识别************************/[A-Za-z]+ { c=yytext[0]; yylval=c-'a'; return(LETTER); pr
6、intf("%10s",yytext); }/*************************整数的识别*********************/ [0-9]+ { printf("%10s",yytext); //c=yytext[0]; //yylval=c-'0'; yylval=atof(yytext); return
7、(DIGIT); }/********************其他符号的识别***************************/[^a-z0-9]{ c=yytext[0]; return(c); }%%/////////////////////////////////////////////////////////////////programssection 辅助程序部分 YACC程序部分:%{#include"my
8、lexer.h"#include#include #include #include intregs[26];%}///////////////////////////////////////////////////////////////////declarationssection//attributetype%include{#ifndefYYSTYPE#defineYYSTYPEint#endif}//pl
此文档下载收益归作者所有