- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Lex使用指南
Lex使用指南 Lex是由美国Bell实验室M.Lesk等人用C语言开发的一种词法分析器自动生成工具,它提供一种供开发者编写词法规则(正规式等)的语言(Lex语言)以及这种语言的翻译器(这种翻译器将Lex语言编写的规则翻译成为C语言程序)。 Lex是linux下的工具,本实验使用的编译工具是cygwin(cygwin在windows下模拟一个linux环境)下的flex,它与lex的使用方法基本相同,只有很少的差别。 一、Lex的基本原理和使用方法 Lex的基本工作原理为:由正规式生成NFA,将NFA变换成DFA,DFA经化简后,模拟生成词法分析器。 其中正规式由开发者使用Lex语言编写,其余部分由Lex翻译器完成.翻译器将Lex源程序翻译成一个名为lex.yy.c的C语言源文件,此文件含有两部分内容:一部分是根据正规式所构造的DFA状态转移表,另一部分是用来驱动该表的总控程序yylex()。当主程序需要从输入字符流中识别一个记号时,只需要调用一次yylex()就可以了。为了使用Lex所生成的词法分析器,我们需要将lex.yy.c程序用C编译器进行编译,并将相关支持库函数连入目标代码。Lex的使用步骤可如下图所示: 二、lex源程序的写法: Lex源程序必须按照Lex语言的规范来写,其核心是一组词法规则(正规式)。一般而言,一个Lex源程序分为三部分,三部分之间以符号%%分隔。 [第一部分:定义段] %% 第二部分:词法规则段 [%% 第三部分:辅助函数段] 其中,第一部分及第三部分和第三部分之上的%%都可以省略(即上述方括号括起的部分可以省略)。以%开头的符号和关键字,或者是词法规则段的各个规则一般顶着行首来写,前面没有空格。 Lex源程序中可以有注释,注释由/*和*/括起,但是请注意,注释的行首需要有前导空白。 1. 第一部分定义段的写法: 定义段可以分为两部分: 第一部分以符号%{和%}包裹,里面为以C语法写的一些定义和声明:例如,文件包含,宏定义,常数定义,全局变量及外部变量定义,函数声明等。这一部分被Lex翻译器处理后会全部拷贝到文件lex.yy.c中。注意,特殊括号%{和%}都必须顶着行首写。例如: %{ #define LT 1 int yylval; %} 第二部分是一组正规定义和状态定义。正规定义是为了简化后面的词法规则而给部分正规式定义了名字。每条正规定义也都要顶着行首写。例如下面这组正规定义分别定义了letter,digit和id所表示的正规式: letter [A-Za-z] digit [0-9] id {letter}({letter}|{digit})* 注意:上面正规定义中出现的小括号表示分组,而不是被匹配的字符。而大括号括起的部分表示正规定义名。 状态定义也叫环境定义,它定义了匹配正规式时所处的状态的名字。状态定义以%s开始,后跟所定义的状态的名字,注意%s也要顶行首写,例如下面一行就定义了一个名为COMMENT的状态和一个名为BAD的状态,状态名之间用空白分隔: %s COMMENT BAD 2. 第二部分词法规则段的写法: 词法规则段列出的是词法分析器需要匹配的正规式,以及匹配该正规式后需要进行的相关动作。其例子如下: while {return (WHILE);} do {return (DO);} {id} {yylval = installID (); return (ID);} 每行都是一条规则,该规则的前一部分是正规式,需要顶行首写,后一部分是匹配该正规式后需要进行的动作,这个动作是用C语法来写的,被包裹在{}之内,被Lex翻译器翻译后会被直接拷贝进lex.yy.c。正规式和语义动作之间要有空白隔开。其中用{}扩住的正规式表示正规定义的名字。 也可以若干个正规式匹配同一条语义动作,此时正规式之间要用 | 分隔。 3. 第三部分辅助函数段的写法: 辅助函数段用C语言语法来写,辅助函数一般是在词法规则段中用到的函数。这一部分一般会被直接拷贝到lex.yy.c中。 4. Lex源程序中词法规则(即正规式)的相关规定: 元字符:元字符是lex语言中作特殊用途的一些字符,包括:* + ? | { } [ ] ( ) . ^ $ “ \ - / 。 正文字符:除元字符以外的其他字符,这些字符在正规式中可以被匹配。若单个正文字符c作为正规式,则可与字符c匹配,元字符无法被匹配,如果元字符想要被匹配,则需要通过“转义”的方式,即用” ”包括住元字符,或在元字符前加\。例如”+”和\+都表示加号。C语言中的一些转义字符也可以出现在正规式中,例如\t \n \b等。 部分元字符在lex语言中的特殊含义: ^表示补集:[^…]表示补集,即匹配
您可能关注的文档
最近下载
- BS EN 12350-5-2019 新鲜混凝土试验.第5部分:流动表试验.pdf VIP
- BS EN 12350-4-2019 新鲜混凝土试验.第4部分:密实度.pdf VIP
- BS EN 12350-5-2019 Testing fresh concrete Part 5:Flow table test 新拌混凝土试验第5部分: 流动台试验.pdf
- 颈动脉支架成形术治疗颈动脉狭窄病人的护理.pdf VIP
- 重庆文理学院,校考,中国现当代作家作品选复习题1.doc VIP
- 重庆文理学院,校考,中国现当代作家作品选复习题2.doc VIP
- BS EN 12350-6-2019 Testing fresh concrete Part 6:Density 新浇混凝土试验第6部分: 密度.pdf
- 交叉配血标本采集流程.pptx VIP
- BS EN 12350-2-2019 新鲜混凝土试验.第2部分:塌陷试验.pdf VIP
- 2025年大学校园二手市场调研报告.docx VIP
有哪些信誉好的足球投注网站
文档评论(0)