- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
45词法分析程序的自动生成.ppt
补充:编译自动生成工具 词法分析程序的自动生成 语法分析程序的自动生成 1 词法分析程序的自动生成 方法 1. 从正规表达式到 NFA 的自动变换 2. 从 NFA 到转换矩阵的自动生成 3. 从转换矩阵自动生成 DFA 4. 实现 DFA 的程序综合 嵌入必要的单词属性设置手段 lex:一个词法分析程序自动生成器 lex 词法规格说明的组成 每个正规表达式描述一种单词的词法规则 相应的程序段是这种单词的处理代码 int yylex( ) 的功能 输入 标准输入流 处理 将输入字符流分成一组匹配正规式的单词串。 每当识别出一个单词时,就执行相应的程序段 输出 返回值:单词种别 全局变量 yylval:单词属性 应用例 需求:词法分析程序,用于识别: 十进制整数、标识符、关键字(if,then,while,do) 设置单词种别 INT, IDEN, IF, THEN, WHILE, DO 设置单词属性 整数的值、标识符的符号表入口 Lookup( text ) 用于获得符号表入口 词法规格说明例 定义部分 %{ #include stdio.h #define INT 1 #define IDEN 2 #define IF 3 #define THEN 4 #define WHILE 5 #define DO 6 int Lookup( char text[ ] ); %} // 将复制到lex.yy.c 补充说明 代表单词种别的常数 IF, THEN, WHILE, DO 专用变量 char yytext[ ] 保存单词文本 int yyleng; 单词字符个数 yylval 的类型 YYSTYPE 缺省为整型 经常定义为联合union类型 语法分析程序的自动生成 方法 编制 LR 分析器 FIRST、FOLLOW集的自动计算 LR( 1 )项目集规范族的自动计算 LALR分析表的自动生成 语法分析程序的代码综合 一个语法分析程序自动生成器 Yacc: Yet Another Compiler Compiler 各种版本:UNIX工具、C语言、Java语言 功能: 按照语法规格说明自动生成语法分析程序 采用 LALR 分析方法 可利用终结符的优先级和结合性 YACC的应用框架 yacc 的特征 一个程序代码文本的结构化处理工具 处理动作和输出程序都是C程序 出错控制 允许数据的重新输入或跳过错误数据 无法处理时的解决方法 改写某些规则,或扩大词法分析功能 能处理大多数实用语言的文法 2.1 语法规格说明 说明部分 %% 语法规则的集合(产生式 + 语义动作) %% 源程序部分 相同非终结符的产生式 非终结符 : 若干非终结符或单词 | 若干非终结符或单词 ; 说明部分 说明所有单词的名字(终结符): %token 名字1 名字2 … 非终结符 没有说明的名字 开始符号 %start 名字 缺省使用第一条规则左部的非终结符 例 2-1:台式计算机翻译程序的 yacc 说明 %{ #include ctype.h %} token DIGIT %% line : expr ‘\n’ { printf( “%d\n”, $1 ); } ; expr : expr ‘+’ term { $$ = $1 + $3; } | term ; term : term ‘*’ factor { $$ = $1 * $3; } | factor ; factor : ‘(‘ expr ‘)’ { $$ = $2; } | DIGIT ; %% // 接下页 相关的词法分析程序 yylex( ) { int c; c = getchar( ); if( !isdigit( c ) ) return c; yylval = c – ‘0’; return DIGIT; } 语法分析器的工作过程 1. 调用词法分析器 yylex( ) 从输入流中获取单词。 2. 根据语法规格说明识别语言结构 3. 每当识别出一个规则时,执行相应的语义动作。 4. 在语义动作中,返回分析结果;并且可以利用其他动作的分析结果。 动作之间的数据传递 为名字配备虚变量代表符号属性 包括非终结符和终结符的属性 $$:规则左侧非终结符的虚变量 $1、$2…:规则右侧各元素的虚变量 类型为 YYSTYPE 用户可以自定义该类型 缺省语义动作 $$ = $1 例2-1:表
您可能关注的文档
最近下载
- 代谢相关(非酒精性)脂肪性肝病防治指南(2024年版) .pdf VIP
- 大连理工大学22春“计算机科学与技术”《数据结构》期末考试高频考点版(带答案)试卷号4.pdf VIP
- 新生儿机械通气常规.pptx
- 全国通用版高考语文一轮复习论述类文本阅读论述类文本筛选并整合文中信息教案.pdf VIP
- 光伏电站建设与施工技术 课件 第一章 光伏电站项目建设前期准备.ppt
- 代谢相关(非酒精性)脂肪性肝病防治指南(2024年版)解读.pptx VIP
- 2024届高考语文论述类文本阅读考点训练:分析概括观点、态度.pdf VIP
- (完整版)生命与健康常识八年级下册教案.pdf VIP
- 高考语文一轮复习:信息类文本阅读之概念类(原卷版+解析).pdf VIP
- (通用版)2019年高考语文一轮复习论述类文本阅读论述类文本筛选并整合文中信息教案.doc VIP
文档评论(0)