- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 程序语言的语法描述
例:句子产生 从开始符号开始 从右边选择一个非终结符X 选择一条语法规则 用γ代替X 重复直到得到一个单词(字符)串 上下文无关文法 一个CFG包括四个组成部分 一组终结符号 组成语言的基本符号,就是前面提到的单词符号 终结符号从语法分析的角度看来是语言不可再分的基本符号 一组非终结符号 也称语法变量,用来代表语法范畴 一个非终结符是一个类或集合记号,而不是一个个体记号 一个开始符号 特殊的非终结符,代表所定义的语言中我们最终感兴趣的语法范畴,这个语法范畴通常称为句子 一组产生式 定义语法范畴的一种书写规则 * SEI * 例:算术表达式文法 * SEI * 自然语言描述 变量是一个算术表达式 若E1和E2是算术表达式,则E1+E2、E1*E2和(E1)也是算术表达式 * SEI * 上下文无关文法的形式定义 形式上说,一个上下文无关文法G是一个四元式 VT是一个非空有限集合,其中每个元素称为终结符号 VN是一个非空有限集合,它的每个元素称为非终结符号,VT∩VN=? S是一个非终结符号,称为开始符号 P是一个产生式集合,每个产生式的形式是 * SEI * 上下文无关文法 例:简单算术表达式的上下文无关文法可表示如下: VN = {E} VT = {+,*,(,),-,i} S = E P: E → E + E (1) E → E * E (2) E →(E) (3) E → -E (4) E → i (5) (G2.1) 该文法可以重写为: E → E + E (1) | E * E (2) |(E) (3) | -E (4) | i (5) (G2.2) * SEI * 文法和语言 文法如何定义语言呢? 从文法的开始符号出发,反复连续使用产生式,对非终结符施行替换和展开。 产生式E→(E) 产生式E →E+E 产生式E →i 产生式E →i * SEI * 文法和语言 直接推出 推导 最左推导、最右推导 * SEI * 文法和语言 句型、句子、语言 文法、句子和句型示例 例1:证明?(i + i)是文法(G2.1)的句子 证明: 因为存在着如下推导 E ? ? E ? ? (E) ? ? (E + E) ? ? (i + E) ? ? (i + i) 所以?(i + i)是文法的句子。(证毕) 出现在这个推导中的E, ? E, ? (E ), …, ? (i + i)都叫做这个文法的句型。 * SEI * 文法、句子和句型示例 例2 :文法G1定义的语言 S→bA A →aA | a 解答:可以分析得出 L(G1) = {ban | n≥1} 例3 :文法G2定义的语言 S→AB A→aA | a B→bB | b 解答:可以分析得出 L(G2) = {ambn | m,n≥1} * SEI * 文法、句子和句型示例 例4:构造文法G3使得 L(G3) = {anbn | n≥1} 解答:构造文法G3如下 S→aSb | ab 例5:构造文法G5使得 L(G5) = {anbm | n≥1,m ≥0} 解答:构造文法G5如下 S→AB A→aA | a B→bB | ε * SEI * 简单程序语言文法……1 是该文法的一个句子 因为存在下面的推导 简单程序语言文法……2 * SEI * 文法和语言 文法与语言之间并不存在一一对应的关系 某一给定的文法可唯一确定它所产生的语言 对于一个给定的语言来说,却往往可以用若干个不同的文法来产生 文法的等价性 设G1和G2是两个文法,若这两个文法产生同样的语言,即L(G1)=L(G2),则称G1和G2等价。 * SEI * 语法分析树 可以用图表示一个句型的推导,这种表示法称为语法分析树,简称语法树或分析树 根节点的标记为文法开始符号; 每个叶子节点由一个终结符标记; 每个中间节点由一个非终结符标记 如果有一步推导为 即我们使用了产生式 则语法分析(子)树的表示为 * SEI * 语法分析树 一棵语法树表示了一个句型种种可能的(但未必是所有的)不同推导过程,包括最左(最右)推导。 如果坚持使用最左(最右)推导,得到的语法树就完全等价于一个最左(最右)推导。 由E最左推导 ?(i + i) 建立的语法树 E ? ? ? E E ? E E ? ( ) E E E ? ( ) E E E + ? ? E E ? ( ) E E E + i E E ? ( ) E E E + i i 语法分析
原创力文档


文档评论(0)