- 195
- 0
- 约2.82千字
- 约 17页
- 2016-10-31 发布于天津
- 举报
Decaf语言编译器的实现(二).ppt
Decaf语言编译器的实现(二) --语法分析器的实现 主要内容 YACC的使用方法 PP2实验要求 YACC的使用方法 概述 YACC源程序的结构 YACC源程序的写法 YACC概述 YACC--A Compiler Compiler YACC源程序的结构 说明部分 %% 语法规则部分 %% 程序段部分 说明部分的写法 说明部分的内容如下: %{ 头文件 宏定义 数据类型定义 全局变量定义 %} 语法开始符定义 语义值类型定义 终结符定义 运算符优先级及结合性定义 语法开始符号的定义 %start 非终结符 注:若没有上述说明,YACC自动将第一条语法规则左部的非终结符作为语法开 始符。 语义值类型的定义 %union定义语义值的类型; %type定义文法符号的语义值类型; %token在定义终结符号时也可以定义语义值类型。 %union { int ival; double dval; } %type ival iexp %token dval CONST // %token CONST // %type dval CONST 终结符的定义 %token 语义值类型 终结符名 编号 %token DIGIT LETTER %token BEGIN 100 注:1.非终结符不需要特别说明,如果需要说明语义值类型则用%type语句; 2.文字字符终结符不需要特别说明,它们的编号取其在字符集中的值; 3.在规则中出现文字字符时用单引号括起来。 运算符优先级和结合性的定义 以%left和%right定义结合性; 以排列顺序定义优先级; 在语法规则中,以%prec辅助定义优先级 %left ‘+’ ‘-’ expr:expr ‘-’ expr %left ‘*’’/’ | expr ‘*’ expr %% | expr ‘/’ expr expr:expr ‘+’expr; | NAME; 语法规则部分的写法 语法规则的书写格式 左部(非终结符):右部(文法符号串);stat: /*empty*/; 可以把左部相同的规则集中在一起书写; 语义动作 YACC在进行归约前,先完成用户提供的语义动作; 语义动作要符合C语言文法; 使用以$开头的伪变量存取语义值。 expr:’(’expr’)’ {$$ = $2}; 解决二义性和冲突的方法 消除二义性的两条规则: 1.出现移进/归约冲突时,进行移进; 2.出现归约/归约冲突时,用先出现的规则进行归约; stat : IF bexp THEN stat | IF bexp THEN stat ELSE stat ; 用结合性和优先级解决冲突; 规则的结合性就是规则右部最后一个非终结符的优先级和结合性; 如果使用了%prec子句,则优先级和结合性由%prec子句决定; 对于无优先级和结合性的规则,用规则1、2解决; 对于有优先级和结合行的规则,用如下的规则解决:出现移进/归约冲突时,输入符号的优先级大于规则的优先级则移进,若输入符号的优先级小于规则的优先级则归约,若二者的优先级相同,左结合则归约,右结合则移进,无结合则出错。 错误处理 遇到错误就终止语法分析; 遇到错误继续进行分析,为此YACC提供了一个保留 的终结符error: 把error写在规则的右部,跳过出错的部分,继续分析; stat: error ; error后跟一个符号,跳过输入串,直到指定符号出现再继续分析。 stat: error ’;’ ; 程序段部分的写法 主程序main() 用户在其中调用语法分析程序yyparse()。 错误信息报告程序yyerror() YACC库提供了一个简单的报错程序。 词法分析程序yylex() 一般是用LEX提供的yylex()程序。 其它程序段 PP2:语法分析器的实现 实验目的:用bison工具生成一个语法分析器,对词法分析输出的单词符号串进行分析,并依次输出归约时所用的各条规则。 实验环境:Windows操作系统,VC 6.0,语法分析程序生成工具bison。 scanner.h 词法分析程序的头文件 不需要改动 scanner.l 词法分析程序 需要改动 parser.h 语法分析程序的头文件 不需要改动 parser.y 语法分析程序 需要改动 main.c 主程序及其它函数 不需要改动 实验重点和难点 bison工具的使用 请仔细阅读bisio
您可能关注的文档
- 1、《配送中心运作与管理》8187,经主持教师确认做如下.doc
- 1、建设方案设计过程中,对建设方案进行多方案的分析和.doc
- 2.3有机化学反应机理基础2.3.1反应机理的概念及其基本研究.ppt
- 2006年农学院第一届网页设计大赛策划书.doc
- 2006年度南通市.doc
- 2007年9月30日1530前有效),请注明报价单位名称、地址.doc
- 2007年山东省潍坊市高二下学期期中考试.doc
- 2007年度天津市品课程.doc
- 2007年度山东省属事业单位公开招聘工作人员《公共基础.doc
- 2008年国家机关公务员考试申论试卷.doc
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 兰科植物促生菌筛选与人工栽培技术研究.pdf
- 氢氧化钠(片碱)MSDS安全技术说明书.docx
- 国家开放大学电大《成本会计》试题及答案.pdf
- 数学分析第四版下册课后习题答案.pdf
- 数学分析第四版下册课后习题答案.docx
- 2025年秋国家开放大学《商务英语3》形考任务参考答案.pdf
- Unit 2 Know your body Speed up 外研版(三起)(2024)英语三年级下册.pptx VIP
- 2026年春季开学教师收心会校长发言:骏驰启新程,笃行育新人;凝心再聚力,实干谱新篇.docx VIP
- Unit 2 Know your body Start up 外研版(三起)(2024)英语三年级下册.pptx VIP
- 空客A320飞行手册教程.doc VIP
原创力文档

文档评论(0)