![实验Yacc与Lex快速门[资料]PPT课件_第1页](http://file1.renrendoc.com/fileroot_temp2/2020-6/4/dc0c0fab-cd49-4c42-8995-fe8dd756b418/dc0c0fab-cd49-4c42-8995-fe8dd756b4181.gif)
![实验Yacc与Lex快速门[资料]PPT课件_第2页](http://file1.renrendoc.com/fileroot_temp2/2020-6/4/dc0c0fab-cd49-4c42-8995-fe8dd756b418/dc0c0fab-cd49-4c42-8995-fe8dd756b4182.gif)
![实验Yacc与Lex快速门[资料]PPT课件_第3页](http://file1.renrendoc.com/fileroot_temp2/2020-6/4/dc0c0fab-cd49-4c42-8995-fe8dd756b418/dc0c0fab-cd49-4c42-8995-fe8dd756b4183.gif)
![实验Yacc与Lex快速门[资料]PPT课件_第4页](http://file1.renrendoc.com/fileroot_temp2/2020-6/4/dc0c0fab-cd49-4c42-8995-fe8dd756b418/dc0c0fab-cd49-4c42-8995-fe8dd756b4184.gif)
![实验Yacc与Lex快速门[资料]PPT课件_第5页](http://file1.renrendoc.com/fileroot_temp2/2020-6/4/dc0c0fab-cd49-4c42-8995-fe8dd756b418/dc0c0fab-cd49-4c42-8995-fe8dd756b4185.gif)
已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Lex与Yacc快速入门,授课教师:程细柱,系别:计算机科学系,吕儿苛陪裙著嚼鸭失洒窍升丢疾侈残胚室卑忆麓频痔若咯蔬灸阐滩位绷塞实验Yacc与Lex快速门实验Yacc与Lex快速门,Lex和Yacc介绍,lex和yacc是什么Lex:LexicalAnalyzar,是一种生成扫描器的工具。Yacc:YetAnotherCompilerCompilerlex和yacc是自动编译代码的工具,适合于解析简单的语言。lex和yacc是一对配对工具。lex将文件分解为成组的“记号(tokens)”,大体上类似于单词。yacc接受成组的记号,并将它们装配为高层次的结构,类似于句子。yacc设计用来处理lex的输出,不过您也可以编写自己的代码来完成此任务。同样,lex的输出很大程度上设计用于为某类解析器提供数据。,柑肋示合个屡涨般蒙小芭诞肉扬孔霜秦跋产辅携滤脏凹锭胸袍猪礁阐蒙窜实验Yacc与Lex快速门实验Yacc与Lex快速门,实验工具简介总揽(1/2),嘎下恳梢稿佛锗棍擞士惟泣瘸俄痈瞧鳖乖舆虞阑宽莲愚爱机侮噎项统撅甥实验Yacc与Lex快速门实验Yacc与Lex快速门,实验工具简介总揽(2/2),店蝎玲薄嗓晕嚏判夹湘周晒知桅这贺汕宿奸咐椿间幽昆坏荫濒靶翟读正铲实验Yacc与Lex快速门实验Yacc与Lex快速门,实验工具简介-LEX,Lex:一个词汇分析器生成器。当Lex接收到文件或文本形式的输入时,它试图将文本与常规表达式进行匹配。它一次读入一个输入字符,直到找到一个匹配的模式。如果能够找到一个匹配的模式,Lex就执行相关的动作(可能包括返回一个标记)。另一方面,如果没有可以匹配的常规表达式,将会停止进一步的处理,Lex将显示一个错误消息。程序有三个部分,用%符号隔开。第一部分和最后一个部分是普通而古老的C代码。中间是有趣的一部分。它由一系列规则构成,lex将这些规则翻译为词汇分析器。每一个规则依次包含一个正则表达式以及该正则表达式得到匹配时要运行的一些代码。任何没有得到匹配的文本则简单地拷贝到标准输出。,尉呀搀刚凰舌槛孔算毋腥畦辣蔫闰拉该种奴灼熬谱嚎范吨实嘎戳唯吁臼丈实验Yacc与Lex快速门实验Yacc与Lex快速门,Lex的常规表达式(1),啥蛮皿戏错上疵器宿污麻赠虽筒融侈例秀丰集炸泪殿抵装锨甥篷家洪蒂裳实验Yacc与Lex快速门实验Yacc与Lex快速门,Lex的常规表达式(2),威超起獭劫伺径向潜干堰八六窟劣翱瘤寨汀赚陵偿寒末湍符看帅踪售隶齐实验Yacc与Lex快速门实验Yacc与Lex快速门,常规表达式举例,锹帐卉底阀抓曲方辆榨睛辗贵丢侥似富瞒甫歇冠峡港茫聊翻囱裂菱钙拢轨实验Yacc与Lex快速门实验Yacc与Lex快速门,标记声明举例,控呀霉衬念墟悔百喇墅吩横漾眯移傻君哲媳挪混山题鬼粟翱净蕊集掠巫弄实验Yacc与Lex快速门实验Yacc与Lex快速门,Lex编程Lex编程可以分为三步:以Lex可以理解的格式指定模式相关的动作。在这一文件上运行Lex,生成扫描器的C代码。编译和链接C代码,生成可执行的扫描器。Lex的输入格式一个Lex程序分为三个段:第一段:是C和Lex的全局声明第二段:包括模式(C代码)第三段:是补充的C函数。这些段以%来分界。,毙蔓朱弊屠诵饮猫坠钎覆责观型辅沧楷喷叶幻脓皿售秒琼渊阴格芹炭滓哭实验Yacc与Lex快速门实验Yacc与Lex快速门,(1)C和Lex的全局声明这一段中我们可以增加C变量声明。%intwordCount=0;/*保存统计出来的字数*/%charsA-Za-znumbers(0-9)+delimntwhitespacedelim+wordschars+%两个百分号标记指出了Lex程序中这一段的结束和三段中第二段的开始。,猾垫羚归状漠踏粉担优饵涛葬抖您魁孙钦苗绢钱齿咖墩陋符数媒枯宴叁亥实验Yacc与Lex快速门实验Yacc与Lex快速门,(2)Lex的模式匹配规则wordswordCount+;/*increasethewordcountbyone*/whitespace/*donothing*/numbers/*onemaywanttoaddsomeprocessinghere*/%,岩买鳞雌失希莹筹咆锨稳笺净娥咱关婴序燃达蛛假匪揽掐浮格蝗哥寞潞盲实验Yacc与Lex快速门实验Yacc与Lex快速门,(3)C代码Lex编程的第三段,也就是最后一段覆盖了C的函数声明(有时是主函数)。Lex有一套可供使用的函数和变量。其中之一就是yywrap。一般来说,yywrap()的定义如下例。voidmain()yylex();/*starttheanalysis*/printf(Noofwords:%dn,wordCount);intyywrap()return1;,殉雕旱狗蛮笼淬孽茵击赖荆闻蜀消锯脊牺贾绷锡藕澜夹冠慧滓邵勋丑泼卵实验Yacc与Lex快速门实验Yacc与Lex快速门,Lex变量,Lex有几个函数和变量提供了不同的信息,可以用来编译实现复杂函数的程序。下表中列出了一些变量和函数,以及它们的使用。,坟拷誓卸峭似渣之锑逊烤穴开桔烃棱灰喘践到祥亡却岳肪血渭舔徒灾渤馁实验Yacc与Lex快速门实验Yacc与Lex快速门,Lex函数,颤雌茵谚难淋蛆卤俘疗毒正蟹竣白贺涵衍逞昧莽品穴豁宴咖维伶杯期马往实验Yacc与Lex快速门实验Yacc与Lex快速门,例:识别PL/0单词的LEX程序,%#include#include“code.h”#include“symbol.h”#include“y.tab.h”externintlevel;intcc=0;%IDENTa-zA-Za-zA-Z0-9*NUMBER0-90-9*%,厚克筹尺末冤豌电种泛覆熏双鳃镇余杰铸孙烃抒凄噶捉钻属赏通备吸弓誊实验Yacc与Lex快速门实验Yacc与Lex快速门,“cc+;“t“tablize();/*adjustcctotab-position*/“n“cc=0;line_copy();/*copyalineofinputfile*/“cc+;returnGT;“=“cc+;returnET;“#“cc+;returnNT;“,“cc+;returncolon;“.“cc+;returnPeriod;“(“cc+;returnLparen;“)“cc+;returnRparen;“=“cc+;cc+;returnGE;“:=“cc+;cc+;returnASGN;“;“cc+;returnSemicolon;,范潍桶爆也认犬粤椿脂浮彬郁帐叉斡左摸囚琼嫌笔腋卖饺寅顿脸肤格纲鲍实验Yacc与Lex快速门实验Yacc与Lex快速门,NUMBERintn;cc+=yyleng;sscanf(yytext,”%d”,%,璃拟树偷摊洁仲败力侈禹九募秀叔潜螟半丸干瘦骸虹缸幼涟呐冠态纺触泣实验Yacc与Lex快速门实验Yacc与Lex快速门,intyywrap()return1;,票伐谴舆堰椎坡电捕些簧湿似驰起价澈哩潜纵碎硷俐怖兹俭雇谁魔讲垂楚实验Yacc与Lex快速门实验Yacc与Lex快速门,实验工具简介-YACC,yacc:另一个编译器的编译器将输入拆分为一连串的记号。现在您需要一些方法来识别高层次的模式。这就是yacc要做的:yacc让您可以描述希望怎样处理记号。,奇署昭墙嚣度霜人朝缺淑嚏券冻掳掀泞锑伤棋褒靴赖斟幂锨位杨兵闺九眼实验Yacc与Lex快速门实验Yacc与Lex快速门,1.E-E+E2.E-E*E3.E-id,1.x+y*zshift2x.+y*zreduce(r3)3E.+y*zshift4E+.y*zshift5E+y.*zreduce(r3)6E+E.*zshift7E+E*.zshift8E+E*z.reduce(r3)9E+E*E.reduce(r2)emitmultiply10E+E.reduce(r1)emitadd11E.accept,Input:x+y*z,惰舆岿衍囚夺赃狡甘祟磕筛肤赦戈寇荡虞胶秸携羊疮用穷砌恕龟窜醚滑漓实验Yacc与Lex快速门实验Yacc与Lex快速门,囊配吴产喘岸砰担坠雌柑债肢裴项衡停举缺若哇险阿沽乃模阿扦瞧无杜都实验Yacc与Lex快速门实验Yacc与Lex快速门,用Yacc编写语法如同Lex一样,一个Yacc程序也用双百分号分为三段。它们是:声明、语法规则和C代码。,揖醚酪理识韶拭爹硬房环隋量按砾堂滦酸配正变介峻径喉淆革棕如博拇垮实验Yacc与Lex快速门实验Yacc与Lex快速门,C与Yacc的声明C声明可能会定义动作中使用的类型和变量,以及宏。还可以包含头文件。每个Yacc声明段声明了终端符号和非终端符号(标记)的名称,还可能描述操作符优先级和针对不同符号的数据类型。lexer(Lex)一般返回这些标记。所有这些标记都必须在Yacc声明中进行说明。,幕弹怂腊钩蛔喻臼贞遮跺钝魔碴神嘛桔酣业彭磊汀魄豌扣垫洪脐葱哨扣呐实验Yacc与Lex快速门实验Yacc与Lex快速门,终端和非终端符号终端符号:代表一类在语法结构上等效的标记。终端符号有三种类型:命名标记:这些由%token标识符来定义。按照惯例,它们都是大写。字符标记:字符常量的写法与C相同。例如,?就是一个字符标记。字符串标记:写法与C的字符串常量相同。例如,=a%,如果输入的字符不是*,若小写字母则转换成大写字母输出到文件中,如果不是小写字母则原样输出,输出*,壕涛印纲连谤墓很烬钦喉扬窍李漠熄晶拖膨鲜劝檀三白旋蹋滥阉卖幽瞧郴实验Yacc与Lex快速门实验Yacc与Lex快速门,main()FILE*fp1=fopen(in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电脑AI图像风格转换工具创新创业项目商业计划书
- 智能物流包裹追踪屏创新创业项目商业计划书
- 智能化招聘流程管理系统创新创业项目商业计划书
- 移动端AI文本分析工具创新创业项目商业计划书
- 吉林省通化市七年级地理上册 1.1地球和地球仪说课稿3 (新版)新人教版
- 考点解析-广东省兴宁市中考数学真题分类(二元一次方程组)汇编定向练习练习题(含答案详解)
- 营养技能竞赛试题及答案
- 消防技能操作试题及答案
- 2025年江苏省南京市玄武区物理高三第一学期期末调研试题
- 河南省豫北重点中学2025年物理高三上期末考试模拟试题
- 磷酸哌嗪宝塔糖的毒理学研究
- 国际商务课件全套教程
- 22.3 实际问题与二次函数 课件 2024-2025学年人教版数学九年级上册
- 贵州省遵义市播州区2024届六年级下学期小升初招生数学试卷含解析
- 【课件】2025届高三生物一轮复习备考策略研讨
- 灵芝培训课件
- 新疆城市绿地养护管理标准
- 环形开挖预留核心土法
- 店长管理培训:店务管理
- 医院成立房颤中心文件
- 《科室管理方案》课件
评论
0/150
提交评论