- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2型文法
一个文法G是一个四元组: G = ( VN, VT, S, P ) 其中: VT:有限的终极符集合 VN:有限的非终极符集合 S:开始符,S?VN P:产生式(规则)的集合 例1 例2:字母表∑ ={a}上的符串集: S={a2n | n=1} 其文法表示如下: 例:将 r=a(a|d)* 转换为相应的正则文法。 4 文法相关概念--推导和归约 2.最右推导 在推导过程中,总是对当前符号串中最右边的非终极符进行替换,称为最右推导,又称之为规范推导, 并用符号 ?rm 表示。 规范推导的逆过程最左规约称为规范归约。 例:上述符号串 i+ i*i 的最右推导过程是: 3.最左推导 在推导过程中,总是对当前符号串中最左边的非终极符进行替换,称为最左推导,并用符号 ?lm 表示。 例:对于表达式文法G: E→E+E | E*E | (E) | i 符号串 i+ i*i 的最左推导过程是: 4.句型: 设有文法G ,S是文法G的开始符号,如果有: S ?* ? , ?∈(VT∪VN)* , 则称?为G的句型。 最右推导得到的句型称为最右句型或规范句型 最左推导得到的句型称为最左句型。 5. 句子:设?为文法G的一个句型,且?只包含终极符,则称?为G的句子。 每一种高级程序设计语言都有自己的语法 符合高级语言文法的程序就是该语法的句子 所有程序组成的集合就构成了语言。 例2:文法G[S]: S?aPd P?bPc | bc 例2: 文法G[S]: S ? aSd | P P ? bPc | bc S = aSd = aaSdd = aaaSddd …… = a…aSd…d = a…aPd…d = a…abPcd…d …… = a…ab…bPc…cd…d 例: C语言简单文法 函数定义 ? 类型id(参数声明){函数体} 函数体 ? 声明语句函数块 声明语句 ? 类型 id; 声明语句 | ? 函数块? ? 赋值语句函数块|for语句函数块|条件语句函数块|调用语句函数块|函数返回函数块|? 赋值语句 ? id=表达式; for语句 ? for(赋值语句逻辑表达式;后缀表达式){函数体} 条件语句 ? if(逻辑表达式){函数体}否则语句 否则语句 ? else{函数体}| ? 调用语句 ? id((参数列表) 函数返回 ? return(表达式); 例: PASCAL 语言简单文法 程序 ? 首部声明部分程序体 首部 ? program id; 声明部分 ? var 标号声明常量声明类型声明过程声明函数声明 程序体 ? begin条件语句循环语句赋值语句输入输出语句过程调用语句...end. * * 语法分析在编译程序中的逻辑位置 表 处 理 错 误 处 理 目 标 代 码 生 成 中 间 代 码 优 化 中 间 代 码 生 成 语 义 分 析 语 法 分 析 词 法 分 析 目 标 程 序 源 程 序 * 第三章 语法分析(Parsing / Syntax Analysis) —自顶向下分析方法 语法分析程序的功能简介 语法分析的理论根据—文法 语法分析方法的分类: 自顶向下语法分析方法 (Top-Down) 自底向上语法分析方法 (Bottom-Up) 两种自顶向下语法分析方法: 递归下降子程序方法 LL(1)方法 * 第三章 语法分析 第一部分 形式语言基础 语言与文法 文法的定义 文法的分类 文法的相关概念 语法分析的任务是: 把词法分析的输出作为输入,按照一定的语法规则,从源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成做准备; 1 语法分析程序的功能 Token List 语法分析器 语法树 / 语法错误信息 自然语言:是人类在社会生活中发展起来的,用于日常相互交流的符号系统。 形式语言:是为了特定应用而设计的人工语言,是用精确的数学或机器可处理的公式定义的语言,公式由人们公认的数学和逻辑符号组成。 程序设计语言:是专门设计用来表达计算过程的形式语
文档评论(0)