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

上传人:王** 文档编号:965489 上传时间:2024-03-04 格式:DOCX 页数:5 大小:19.54KB
下载 相关 举报
编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx_第1页
第1页 / 共5页
编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx_第2页
第2页 / 共5页
编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx_第3页
第3页 / 共5页
编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx_第4页
第4页 / 共5页
编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx》由会员分享,可在线阅读,更多相关《编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX.docx(5页珍藏版)》请在优知文库上搜索。

1、编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX返回首页作者:Riceball(riceballl)关键字:编译器,解释器,LEX,YACC,编译原理,正则表达式,PaSCaI预备知识:编译原理,正则表达式,PaSCal木文并不希望深入透彻的讲解编译原理,而是讲解如何利用工具(生成编译器的编译器)去编写编译器。如果你完全不知道编译什么东西,那么请看懂了编译原理,在看此文,本文不是为初学者准备的。一、什么是编译器(解释器)编译器是将一种计算机语言翻译为另一种计算机语言的程序。编译器将源程序(SoUrCelanguage)编写的程序作为输入,翻译产生用目标语言(targetlangua

2、ge)编写的等价程序。源程序一般为高级语言(high-levellanguage),如PaSCaI或DeIPhi,而目标语言则是汇编语言或目标机器的目标代码(ObjeCtcode),有时也称作机器代码(machinecode)源程序一编译器一目标程序解释器也是同编译器一样的一种语言翻译程序。它与编译器的不同之处在于:它立即执行源程序而不是生成目标代码。从原理上讲,任何程序设计语言都可以被解释或被编译。(1)扫描程序(scanner)由扫描程序(SCanner)阅读源程序(通常以字符流的形式表示),进行词法分析(LeXiCaIanalysis),它将源程序翻译成单词ID(TOker1),放入单词

3、ID(TOken)表中。在此过程中,扫描程序会进行简单的拼写检查。单词ID(Token):一个TOken可以有若干种类型,典型的有:关键字(keyword),例如if和while;标识符(identifier)是由用户定义的变量名,过程名等,它们通常由字母和数字组成并由一个字母开头;特殊符号(SPeCiaISymbOI)如算术符号+和*、一些多字符符号,如=和OoTokenType为枚举数据类型。实际上就是整数值,每一个数值代表一种单词ID类型。TTokenType=(ttNone,ttStrVal,ttlntVal,ttFloatVal,/ttNAME就是标识符Identifier或关键字t

4、tNAME,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

5、,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,ttCRIG

6、HT,ttDEFAULT,/TokensforcompatibilitytoDelphittPRlVTE,ttPROTECTED,ttPUBLlC,ttPUBLISHED,ttREG!STER,ttPASCL,ttCDECL,ttSTDCLL,ttFSTCLL);TTokenTypes=setofTTokenType;为了表示Token的内容,一般我们这样定义Token:TToken=RecordTokenType:TTokenType;TokenValue:Variant;end;TPLEXTPLex是词法分析(LeXiCalanalysis)扫描器源程序的生成器,它用于创建PaSCaI(T

7、UrbOPaSCa1,DCIOhi)扫描器子过程。TPLex分析LEX文件(默认扩展名为.L),产生词法分析(LCXiCaIanalysis)扫描器过程,输出pascal源程序文件。如果LEX文件在分析过程发现错误,错误信息将会被写入相应的列表文件(扩展名为.1st)。创建的pascal源文件程序将包含词法分析(LeXiCalanalysis)扫描器过程:yylex。functionyylex:Integer;你应该在你的主程序中调用该过程进行词法分析。每调用一次,yylex的返回值为当前分析的TOken类型值。当文件结束时,yylex的返回值为0。yylex过程的代码模板在yylex.cod

8、文件中。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)%辅助过

9、程部分(auxiliaryprocedures)三个部分可以都是空的也没有关系,以行为单位作为语句的分隔符。定义部分(definitions)定义部分出现在第1个双百分号之前。定义部分(definitions)可以包含以下的元素:-正则表达式一般定义格式:定义的表达式名称(name)替换的结果(substitution)正则表达式的名字也得在该部分定义。这个名字的定义写在另一行的第1歹J,且其后(后面有一个或多个空格)是它所表示的正则表达式。定义的名称(name)必须是一个合法的标识符(第一位必须是字母,第二位可以是字母或数字)替换的结果(SUbStitUtiOn)是一个LEX正则表达式,你也

10、可以在正则表达式中引用前面定义好的表达式名称,只要将该名称用花括号()扩起即可。例如,带符号数字的定义:Number0-9+SignedNumber(+_)?Number)-开始(Start)状态按照如下的格式书写:%startname这用来指定规则的启动条件(详见规则部分)。%start关键字可以被简写为%s或%S.-“”与“%”对插入在“%”与“喇”对中间的是函数外部的任意皿”L源代码(请注意这些字符的顺序)。规则部分(rules)它们由一连串带有PaSCal代码的正则表达式组成:当匹配相对应的正则表达式时,后面的PaSCaI代码(动作)就会被执行。规则的格式如下:正则表达式(expres

11、sion)语句(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三【关闭】

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机原理

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!