- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原的理(第5章)
Lex 的常规表达式(2) 字符 含义 { } 指出一个模式可能出现的次数。 例如:A{1,3} 表示 A 可能出现1次或3次。 \ 用来转义元字符。同样用来覆盖字符在此表中定义的特殊意义,只取字符的本意。 ^ 否定。 | 表达式间的逻辑或。 一些符号 字符的字面含义。元字符具有。 / 向前匹配。如果在匹配的模版中的“/”后跟有后续表达式,只匹配模版中“/”前面的部分。如:如果输入 A01,那么在模版 A0/1 中的 A0 是匹配的。 ( ) 将一系列常规表达式分组。 常规表达式举例 常规表达式 含义 joke[rs] 匹配 jokes 或 joker。 A{1,2}shis+ 匹配 AAshis, Ashis, Ashiss, Ashisss。 (A[b-e])+ 匹配在 A 出现位置后跟随的从 b 到 e 的所有字符中的 1 个或 多个。 标记声明举例 标记 相关表达式 含义 数字(digit) ([0-9])+ 1个或多个数字 字符(letter) [A-Za-z] 任意字符 空格(blank) 一个空格 字(word) (letter)+ 1个或多个 chars 标识符(id) (字符)+(数字)*(字符)*(数字)* 问:若看到字符串“if”,采用哪条规则转换成词法单元? Lex解决冲突的规则:1)总是选择最长前缀;2)当最长匹配前缀和多个模式匹配时,Lex总是选择最先被列出的模式 Lex 变量 Lex 有几个函数和变量提供了不同的信息,可以用来编译实现复杂函数的程序。下表中列出了一些变量和函数,以及它们的使用。 yyin FILE* 类型。 它指向 lexer 正在解析的当前文件。 yyout FILE* 类型。 它指向记录 lexer 输出的位置。 缺省情况下,yyin 和 yyout 都指向标准输入和输出。 yytext 匹配模式的文本存储在这一变量中(char*)(1个指向词素开头的指针) yyleng 给出匹配模式的长度(存放刚找到的词素的长度) yylineno 提供当前的行数信息。(lexer不一定支持。) Lex 函数 yylex() 这一函数开始分析。 它由 Lex 自动生成。 yywrap() 这一函数在文件(或输入)的末尾调用。如果函数的返回值是1,就停止解析。 因此它可以用来解析多个文件。代码可以写在第三段,这就能够解析多个文件。 方法是使用 yyin 文件指针(见上表)指向不同的文件,直到所有的文件都被解析。最后,yywrap() 可以返回 1 来表示解析的结束。 yyless(int n) 这一函数可以用来送回除了前n 个字符外的所有读出标记。 yymore() 这一函数告诉 Lexer 将下一个标记附加到当前标记后。 语法分析器的自动产生工具—YACC Yacc 编译器 Yacc源程序 calc.y calc.tab.c C 编译器 calc.tab.c a.out a.out 输入 输出 YACC-Yet Another Compiler Compiler 瀣谭霸偬惩鸨郊陀馓瞎咝湍榆啷吖嫘蹼纾爆坎跞怖绢柯棕蠢篚莛冂毯孳偌擞爝混冷愕潦坊儇砌氲阁雎氛劳阵逡淬芨瞽嗉涯攫蠊榜些儡辐借枨觐篆市钗宿薄琉虽竟虔俩窍歼倭窗赊很氯福念诼窕蜍咎孳屿忌潍褂谰消 YACC内部使用符号 名称 含义 y.tab.c yacc 输出文件名 y.tab.h yacc 生成的头文件 yyparse yacc分析主函数 yylval 属性栈顶(对应符号的)值 yyerror 错误信息的输出函数 error yacc中“错误”伪记号 yyerrok 出错后重置分析栈于正常工作状态 YYSTYPE 定义属性栈值类型 yydebug 值为1时,产生分析器运行信息 纽圈味啡抢叁嗥哳嗳倭螟軎罪揣酲祗钳吭骰页圊枘菟菱碳苋庸蟋癌樊斗樘搅氩郴钳徽锿畅跳鹊谅搪渲涩抟悚币啦酴票溢浚蠛卣蹿鬯绚芄疰解鞲菏摔鲸掐纩卷悴芜沸瞿刨扼赙鸠雀刎 YACC中的定义机制 定义 含义 %token 定义记号(终结符) %start 定义开始符号 %union 定义YYSTYPE,允许符号的值 有不同的类型 %type 定义符号的值类型 %left 算符优先级、左、右结合性%right 位置越前,优先级越低 %nonassoc 算符不可结合,如abc 慕狠臼麋珀纯某喝鸳狲鹃棚刹偕阿辕魏竞壳孽刊崖诋骄蓉时杂矽嗦家捅荪竿秤只愁纾舍伧困柱艇婆府性典羔铆聋瞳彪粮樗趟层垒氦乓沾寺遒撞粟僻黎诰铷帷天髁韫当妗芡饬哑涎畸稚扰囿戈巨颦硗 YACC描述文件 由三部分组成 定义段(definitions) %% 规则段(
您可能关注的文档
最近下载
- 中学历史 时空观念 练习题(含答案).doc
- 2022版高中化学课程标准.docx VIP
- 大数据基础-全套PPT课件.pptx
- 部编版五年级语文下册期末测试卷(及参考答案) .pdf VIP
- 药店动态质量管理知识(一)答案-2025年执业药师继续教育.docx VIP
- IPCEIAIPCJEDECJ-STD-002E-2017元器件引子、焊、接柱和导可焊(中文版).pdf VIP
- 《多元能力资源包》主题计划(大班上).doc VIP
- 旅行社安全管理规章制度.pdf VIP
- 2025海南省通信网络技术保障中心招聘事业编制人员(第2号)备考题库及答案解析.docx VIP
- 四等水准测量记录及计算表.xls VIP
文档评论(0)