《lexyacc使用基础》PPT课件

《lexyacc使用基础》PPT课件

ID:46949677

大小:353.31 KB

页数:28页

时间:2019-12-01

《lexyacc使用基础》PPT课件_第1页
《lexyacc使用基础》PPT课件_第2页
《lexyacc使用基础》PPT课件_第3页
《lexyacc使用基础》PPT课件_第4页
《lexyacc使用基础》PPT课件_第5页
资源描述:

《《lexyacc使用基础》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、flex/bison使用基础fLex编译器C语言编译器fLex文件(文本文件)Lex.yy.c可执行的词法分析工具输入文件单词符号定义部分规则部分用户子程序部分LEX(flex)的程序结构第一部分定义部分定义部分%{……….%}正规式内容Include、声明语句等C语句及正则表达式%{#include“stdio.h”#include”y.tab.h”intlineno%}delim[t]letter[A-Za_z]digit[0-9]id{letter}({letter}

2、{digt})*第二部分规

3、则部分规则部分起始于%%,终止于%%,其间是词法规则(正则表达式)和相应的动作组成格式P1{A1}P2{A2}P3{A3}其中,Pi是一个正规式(第一部分定义的正规式的名字)Ai是一个程序段{C语句}Lex中的正则表达式规则转义字符:[]:表示一个集合,可以结合-表示一个范围,如[abc],[a-zA-Z]?*+:0或1次,任意次,至少一次.:任意一个符号

4、:二选一():分组,括号内的内容被看作一个原子,如(ab)识别规则%%{++num_line;}[A-Za-z]+{++num_words;}.{+

5、+num_chars;}%%注意:在识别规则中引用正规式的名字时,要用{}分隔。例如:{letter}({digit}

6、{letter})*用户子程序部分包含用c语言编写的子程序,这些子程序可以用在前面的动作中,这样可以达到简化编程的目的。Lex编程的第三段,也就是最后一段覆盖了C的函数声明(有时是主函数)。注意这一段必须包括yywrap()函数的定义。用户子程序的相关问题Main(intargc,char*argv[]){--argc;++argv/*跳过对第一个文件,即main函数多对应的.exe文件*

7、/if(argc>0)yyin=fopen(argv[0],’r’);elseyyin=stdinyylex();}一个完整的lex(flex)程序%{intwordCount= 0;        %}chars[A-za-z‘.“]         numbers ([0-9])+delim[t]         whitespace {delim}+         words {chars}+%%{words} {wordCount++; }{whitespace} { }{number

8、s} {numcount++ }%%void main()         {yylex(); /* start the    analysis*/printf(" No of words:   %d",wordCount);         }intyywrap()         {         return 1;         }fLex编译器C语言编译器fLex文件(文本文件)Lex.yy.c可执行的词法分析工具输入文件单词符号文法分析器生成工具bisonYacc/Bison是一

9、个通用的工具,能够根据用户指定的规则,生成一个词法分析程序。bison/yacc文件的格式declarations(声明)%%rules(规则)%%programs(代码)声明段声明段声明一些符号常量,可以为空。lex一样,声明段中可以有出现在目标C程序中的代码,放在%{…%}中还有一些yacc关键词可以指示出token的结合顺序:%left左结合%right右结合%nonassoc不结合%token声明token%{#include#includeintregs[26]

10、;intbase;%}%startlist%tokenDIGITLETTER规则段规则段的结构如下,A :BODY ;A表示非终结符名,BODY表示产生式和动作。产生式包括非终结符和终结符,非token的终结符用“”引用。动作(action)则是在输入被当前规则识别出来时而执行的。动作实际上就是C的代码,写在{}中。为了沟通词法分析器和动作,yacc引入了形式变量,以$开头。如果希望获得词法分析器和前面的动作返回的值,我们可以使用$1,$2,…。$i表示一条规则右侧第i个单元的值。比如有这样的一条规则,A 

11、:BCD ;C的返回值为$2,D为$3。$$产生式左部的非终结符的属性list:/*empty*/

12、liststat''

13、listerror'‘{yyerrok;};stat:expr{printf("=%d",$1);}

14、LETTER'='expr{regs[$1]=$3;};expr:'('expr')'{$$=$2;}

15、expr'+'expr{$$=$1+$3;}

16、expr'-'expr{$$=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。