编译原理实践--语法分析程序的自动生成工具YACC.PPT

例2: #union {SYMBOL *sym; ENODE *node; }YYSTYPE 引用时候的方式 %token id %type expr 以%token开始的行定义的是终结符的类型 以%type开始的行定义是非终结符的类型 3.终结符定义 在yacc源程序语法规则部分出现的所有终结符(正文字符“+”,“-”等除外)等必须用%token定义,定义形式: 单一数据类型: %token 终结符1 终结符2 多数据类型: %token 终结符1 终结符2 … 优先级和结合性定义 %left 左结合 %right 右结合 %nonassoc 无结合性 %prec 强制定义优先级 编译原理实践--语法分析程序的自动生成工具YACC YACC简单的介绍 YACC(Yet Another Compiler-Compiler) 是美国贝尔实验室开发的语法分析程序自动生成器.其输入是某个语言的语法规则,输出该语言的语法分析器。 目前YACC生成的是一个LALR(1)分析器。 常用版本:Berkeley大学的BYACC,GNU工程的BISON YACC的使用流程 YACC源程序 YACC Y_tab.c (宏定义文件) C编译器 Y_tab.exe 字符串源程序 Y_tab.exe 分析结果 YACC的输入文件称为YACC源文件,以.y为扩展名,输出文件有两个,一个是包含有语法分析函数yyparse()的C程序,另一个是包含源文件中所有终结符编码的宏定义文件,扩展名为.h。这两个文件经过C编译器的编译就生成一个语法分析器,该语法分析器的输入是源程序经过词法分析的结果,输出可以是一棵语法树,或者是所生成的目标代码,也可以是关于输入串是否符合语法规则的信息。具体的输出形式可以在YACC源程序中自己定义。 Y_tab.c (宏定义文件) YACC和LEX有直接的接口,由于YACC与LEX的特殊功能,这两个姐妹程序成为软件工程的重要工具,被称为“黄金组合”。 很多程序设计语言编译程序的设计都使用了LEX和YACC,比如著名的GNU C语言编译器,PASCAL语言向C语言的转换工具p2c等,就是用FLEX和BISON实现的 多数程序设计语言的语法分析都采用LALR(1)分析法,YACC也正是以LALR(1)文法为基础。它通过对输入的形式文法规则进行分析,产生LALR(1)分析表,输出以该分析表驱动的语法分析器C语言源程序。 YACC源程序结构 YACC源程序由三个部分组成,各部分以“%%”为分隔符。说明部分和程序部分可选,规则部分是必需的。 [说明部分] %% 规则部分 [%% 程序部分] YACC源程序结构—说明部分 YACC源程序说明部分包括了YACC需要用来建立分析程序的有关记号、数据类型以及文法规则的信息。它还包括了必须在它的开始时直接进入输入文件的任何C代码(主要是其他源代码文件的#include指示)。说明部分可以是空的。 说明部分通常包含两部分内容: C语言代码部分 Yacc说明部分 YACC源程序结构—说明部分 %{ 头文件表 宏定义 数据类型定义 全局变量定义 %} 文法开始符号定义 语义值类型定义 终结符定义 非终结符定义 优先级和结合性定义 YACC源程序结构—说明部分 C语言代码部分:%{ …%}之间的部分直接copy到输出文件中去 Yacc说明部分: %start S 指明S为文法开始符号,若未给出开始符定义,系统自动以第一条语法规则的左部符号作为开始符 语义值类型定义 语义值的数据类型定义就是确定语义栈的数据结构 例1:单一的数据类型 #define YYSTYPE double YACC源程序—语法规则部分 语法规则部分是整个YACC源程序的主体,它是由一组产生式及相应的语义动作组成。规则部分包括修改的BNF格式的文法规则,以及将在识别出识别出相关的文法规则时被执行的C代码中的动作(即根据LALR(1)分析算法,在归约中使用)。文法规则中使用的元符号惯例如下: 通常,竖线|被用作替换(也可以分别写出替换项),而用来分隔文法规则的左右两边的箭头符号-〉在YACC中用冒号表示,最后,必须用分号来结束每个文法规则。 YACC源程序—语法规则部分 对文法中的产生式 在YACC程序中可表示成 A: {语义动作1} {语义动作2} …… {语义动作m} ; YACC源程序—语法规则部分 YACC中的动作是由在每个文法规则中将其写作真正的C代码(在大括号中)来实现的。在书写动作时,可以使用YACC伪变量。当识别一个文法规则时,规则中的每个符号都拥有一

yacc c语言语法分析,编译原理实践--语法分析程序的自动生成工具YACC.PPT相关推荐

  1. c语言哪个编译软件能够将整个工程自动生成调用图_这10个C语言技巧让初学者少走180天弯路!...

    硬件设计师最常见的工作内容是通过写代码来测试硬件.这10个C语言技巧(C语言仍然是常见的选择)可以帮助设计师避免因基础性错误而导致某些缺陷的产生并造成维护方面的困扰. 技巧 1:不要使用"G ...

  2. 编译原理lr(0)c语言,关于编译原理:LR(1)LR(0)文法判断?

    "编译原理"是大学计算机类专业的一门主干课程.设置本课程的目的,在于系统的向学生讲述编译系统的结构.工程流程以及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习,既掌 ...

  3. c 语言编写编译原理语义分析实验,北邮 编译原理 语义分析实验报告

    <北邮 编译原理 语义分析实验报告>由会员分享,可在线阅读,更多相关<北邮 编译原理 语义分析实验报告(14页珍藏版)>请在人人文库网上搜索. 1.编译原理第六章 语义分析目 ...

  4. c语言编译器下载 天天,简单C语言编译器(编译原理)

    简单C语言编译器(编译原理) (26页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 #include#include#include# ...

  5. java合一算法_Prolog语言的编译原理:合一算法

    Prolog语言的编译原理:合一算法 分类:软考 | 更新时间:2016-07-08| 来源:转载 Prolog是一种基于谓词演算的程序设计语言.Prolog是一种说明性语言,它的基本意思是程序员着重 ...

  6. java语言生成语法分析_语法分析器自动生成工具一览

    最近打算重做以前的一个留下遗憾的工作,当中的一项小任务就是要求编写一个简易SQL语言的语法分析器. 本科的<编译原理>课程依稀在我脑中留下些许映象.当初的课程大作业是写一个叫Dicuf(貌 ...

  7. python和报表生成工具_报表自动生成工具的原理方法,及热门软件

    阅读提示: 文章中与FineReport软件使用的相关内容,基于软件的V7.0旧版本编写,不代表软件最新的使用方式. FineReport最新版免费试用:https://www.finereport. ...

  8. 编译原理2-Bison语法分析

    ps:补上了图 实验要求 了解 Bison 基础知识和理解 Cminus-f 语法(重在了解如何将⽂法产⽣式转换为 Bison 语句) 阅读 /src/common/SyntaxTree.c ,对应头 ...

  9. 编译原理算符分析器实现 -* c语言代码,编译原理论文-词法分析器的设计与实现...

    <编译原理论文-词法分析器的设计与实现>由会员分享,可在线阅读,更多相关<编译原理论文-词法分析器的设计与实现(13页珍藏版)>请在人人文库网上搜索. 1.编译原理论文题 目 ...

  10. 编译实验 lr c语言代码,编译原理-实验5-LR(1)分析法

    <编译原理-实验5-LR(1)分析法>由会员分享,可在线阅读,更多相关<编译原理-实验5-LR(1)分析法(6页珍藏版)>请在人人文库网上搜索. 1.编译原理实验报告项目名称 ...

最新文章

  1. ABAP更改程序的请求包操作
  2. Hystrix使用与分析
  3. 【渝粤教育】国家开放大学2018年春季 8622-22T社会调查研究与方法 参考试题
  4. Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素
  5. 华为路由器ospf路由表解读_网络-路由交换-路由基础-华为-OSPF的工作原理
  6. 实用的 Python —— 进制(二进制形式中 1 的位数)
  7. python是什么专业-python有什么用(会计专业)
  8. 医院耗材管理系统开发_0
  9. 第九届大唐杯省赛知识梳理-5G协议与信令(20%)
  10. WebSSH2和docker化
  11. idea no artifacts configured 配置
  12. 百度信息流投放效果不稳定,意图词要怎么筛选,先测试词包还是先测试创意好?
  13. dhcp服务器修改网关地址,5.1.9 配置DHCP客户端网关地址
  14. IT运维的365天--009微信双开批处理文件运行出错(当前目录无效)的解决
  15. 从输入url到页面加载完成中间都发生了什么?
  16. 余弦相似度计算的实现方式
  17. WSO2服务端部署常见的问题以及解决方案
  18. ie调用java闪退_win7旗舰版系统位数不兼容导致IE浏览器频繁出现闪退怎么办
  19. 时域反射计(TDR)原理与应用
  20. 雅虎第三轮竞购报价已于周三进行,最终结果将在7月18日公布

热门文章

  1. 每日一句 i'm by disposition one of life's neutrals,a human Switzerland
  2. 降维: 主成分分析(PCA) 局部线性嵌入(LLE)
  3. 文本区域css,如何知道文本从一个CSS区域溢出到另一个区域?
  4. 前端封装接口弹出错误_用SpringBoot教你写出优雅的后端接口
  5. 树莓派使用autofs挂载移动硬盘 -----linux通用
  6. itext 表格宽度自适应_微信公众号推文中如何自定义添加表格?
  7. 使用Nodejs将js文件转换成json文件
  8. nova4e鸿蒙,为何如此执着麒麟芯片?华为首席战略官揭晓答案
  9. mongodb默认的用户名密码_Linux如何安装、运行MongoDB教程
  10. 《线性代数及其应用》看完