欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx

    • 资源ID:1047228       资源大小:19.54KB        全文页数:5页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx

    编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX返回首页作者:Riceball(riceballl)关键字:编译器,解释器,LEX,YACC,编译原理,正则表达式,PaSCaI预备知识:编译原理,正则表达式,PaSCal木文并不希望深入透彻的讲解编译原理,而是讲解如何利用工具(生成编译器的编译器)去编写编译器。如果你完全不知道编译什么东西,那么请看懂了编译原理,在看此文,本文不是为初学者准备的。一、什么是编译器(解释器)编译器是将一种计算机语言翻译为另一种计算机语言的程序。编译器将源程序(SoUrCelanguage)编写的程序作为输入,翻译产生用目标语言(targetlanguage)编写的等价程序。源程序一般为高级语言(high-levellanguage),如PaSCaI或DeIPhi,而目标语言则是汇编语言或目标机器的目标代码(ObjeCtcode),有时也称作机器代码(machinecode)源程序一编译器一目标程序解释器也是同编译器一样的一种语言翻译程序。它与编译器的不同之处在于:它立即执行源程序而不是生成目标代码。从原理上讲,任何程序设计语言都可以被解释或被编译。(1)扫描程序(scanner)由扫描程序(SCanner)阅读源程序(通常以字符流的形式表示),进行词法分析(LeXiCaIanalysis),它将源程序翻译成单词ID(TOker1),放入单词ID(TOken)表中。在此过程中,扫描程序会进行简单的拼写检查。单词ID(Token):一个TOken可以有若干种类型,典型的有:关键字(keyword),例如if和while;标识符(identifier)是由用户定义的变量名,过程名等,它们通常由字母和数字组成并由一个字母开头;特殊符号(SPeCiaISymbOI)如算术符号+和*、一些多字符符号,如>=和OoTokenType为枚举数据类型。实际上就是整数值,每一个数值代表一种单词ID类型。TTokenType=(ttNone,ttStrVal,ttlntVal,ttFloatVal,/ttNAME就是标识符Identifier或关键字ttNAME,ttSWlTCH,ttVR,ttCONST,ttTYPE,ttRECORD,ttRRY,ttDOT,ttDOTDOT,ttOF,ttTRY,ttEXCEPT,ttRAISE,ttFINALLY,ttON,ttRED,ttWRITE,ttPROPERTY,ttPROCEDURE,ttFUNCTION,ttCONSTRUCTOR,ttDESTRUCTOR,ttCLSS,ttNIL,ttIS,ttAS,ttVIRTUAL,ttOVERRlDE,tREINTRODUCE,ttINHERITED,ttBSTRCT,ttEXTERNAL,ttFORWARD,ttIN,ttBEGIN,ttEND,ttBREAK,ttCONTINUE,ttEXIT,ttIF,ttTHEN,ttELSE,ttWHILE,ttREPEAT,ttUNTIL,ttFOR,ttTO,ttDOWNTO,ttDO,ttCASE,ttTRUE,ttFALSE,ttAND,ttOR,ttXOR,ttDIV,ttMOD,ttNOT,ttPLUS,ttMINUS,ttTIMES,ttDIVIDE,ttEQ,ttNOTEQ,ttGTR,ttGTREQ,ttLESS,ttLESSEQ,ttSEMI,ttCOMMA,ttCOLON,ttASSIGN,ttBLEFT,ttBRIGHT,ttALEFT,ttARIGHT,ttCRIGHT,ttDEFAULT,/TokensforcompatibilitytoDelphittPRlVTE,ttPROTECTED,ttPUBLlC,ttPUBLISHED,ttREG!STER,ttPASCL,ttCDECL,ttSTDCLL,ttFSTCLL);TTokenTypes=setofTTokenType;为了表示Token的内容,一般我们这样定义Token:TToken=RecordTokenType:TTokenType;TokenValue:Variant;end;TPLEXTPLex是词法分析(LeXiCalanalysis)扫描器源程序的生成器,它用于创建PaSCaI(TUrbOPaSCa1,DCIOhi)扫描器子过程。TPLex分析LEX文件(默认扩展名为.L),产生词法分析(LCXiCaIanalysis)扫描器过程,输出pascal源程序文件。如果LEX文件在分析过程发现错误,错误信息将会被写入相应的列表文件(扩展名为.1st)。创建的pascal源文件程序将包含词法分析(LeXiCalanalysis)扫描器过程:yylex。functionyylex:Integer;你应该在你的主程序中调用该过程进行词法分析。每调用一次,yylex的返回值为当前分析的TOken类型值。当文件结束时,yylex的返回值为0。yylex过程的代码模板在yylex.cod文件中。TPLex需要该文件构建生成pascal源程序文件。该文件必须在当前目录或TPLEX所在目录下。另外生成好的源程序需要LexLib.pas文件进行编译。用法:lexoptionslex-file.1output-fi1e.pasOptions(参数)-v详尽(Verbose):在该参数下,Lex在生成词法分析器的同时,将生成一个可读的说明文件,扩展名'.1st'.-O”优化(OPtinliZe):"LCX将优化DFA表,产生一个最小的DFA.如何编写LEX文件(.L)1.EX文件(.L)分为三个部分,每个部分之间用“%”隔开:定义部分(definitions)%规则部分(rules)%辅助过程部分(auxiliaryprocedures)三个部分可以都是空的也没有关系,以行为单位作为语句的分隔符。定义部分(definitions)定义部分出现在第1个双百分号之前。定义部分(definitions)可以包含以下的元素:-正则表达式一般定义格式:定义的表达式名称(name)替换的结果(substitution)正则表达式的名字也得在该部分定义。这个名字的定义写在另一行的第1歹J,且其后(后面有一个或多个空格)是它所表示的正则表达式。定义的名称(name)必须是一个合法的标识符(第一位必须是字母,第二位可以是字母或数字)替换的结果(SUbStitUtiOn)是一个LEX正则表达式,你也可以在正则表达式中引用前面定义好的表达式名称,只要将该名称用花括号()扩起即可。例如,带符号数字的定义:Number0-9+SignedNumber(+"_)?Number)-开始(Start)状态按照如下的格式书写:%startname这用来指定规则的启动条件(详见规则部分)。%start关键字可以被简写为%s或%S.-“”与“%”对插入在“%”与“喇”对中间的是函数外部的任意皿”L源代码(请注意这些字符的顺序)。规则部分(rules)它们由一连串带有PaSCal代码的正则表达式组成:当匹配相对应的正则表达式时,后面的PaSCaI代码(动作)就会被执行。规则的格式如下:正则表达式(expression)语句(StateInent);注意:语句(Statement)必须是单独的一个PaSCal语句,最后以分号结尾(如果有多个语句使用BCgin.End)。语句(StatCmCnt)可以分成多行书写,不过后续行必须首先至少留一个空格或tab,用来指示该行是属于上一行的。使用表示该表达式执行的动作和下一个表达式执行的动作(语句)一样。例如,PaSCal的注释:(*""beginrepeatc:=get_char;casecof'*':beginc:=get_char:ifc=')'teexitelsengetcharfc)end;#0:begincommenteof;exit;end;end;untilfalseend;TPLex库单元提供了一系列有用的变量和过程,你可以在你编写的动作(语句)中使用。如:yytext变量返回匹配的字符串。yyleng变量返回匹配的字符串长度。在规则部分中的“外”与“船”对,中间插入的Pascal源代码,被当作是动作的局部变量(过程)出现。辅助过程部分(auxiliaryprocedures)辅助过程部分可以包含PaSCal源程序,如辅助过程或主程序,该部分会被简单的放在文件的末尾。【收臧】【评论】±±1i三【关闭】

    注意事项

    本文(编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开