高级语言和语法描述.pptVIP

  • 1
  • 0
  • 约6.11千字
  • 约 48页
  • 2019-11-10 发布于安徽
  • 举报
国防科技大学计算机系602教研室 2.3 程序语言的语法描述 几个概念: 考虑一个有穷 字母表∑ 字符集 其中每一个元素称为一个字符 ∑上的字(也叫字符串) 是指由∑中的字符所构成的一个有穷序列 不包含任何字符的序列称为空字,记为ε 用∑*表示∑上的所有字的全体,包含空字ε 例如: 设 ∑={a, b},则 ∑*={ε,a,b,aa,ab,ba,bb,aaa,...} 国防科技大学计算机系602教研室 ∑*的子集U和V的连接(积)定义为 UV={ ?? | ??U ??V } V自身的 n次积记为 Vn=VV…V 规定V0={?},令 V*=V0∪V1∪V2∪V3∪… 称V*是V的闭包; 记 V+=VV* ,称V+是V的正规闭包。 国防科技大学计算机系602教研室 2.3.1 上下文无关文法 文法: 描述语言的语法结构的形式规则 上下文无关文法的定义: 一个上下文无关文法G是一个四元式 G=(VT,VN,S,P),其中 VT:终结符集合(非空) VN:非终结符集合(非空),且VT ? VN=? S:文法的开始符号,S?VN P:产生式集合(有限),每个产生式形式为 P??, P?VN, ? ? (VT ? VN)* 开始符S至少必须在某个产生式的左部出现一次。 国防科技大学计算机系602教研室 几点规定: “ ? ”也可以用“::=表示, 这种表示称为巴科斯范式(BNF) P ? ?1 P ? ?2 可缩写为 P ? ?1|?2|?|?n ? P ? ?n 其中,“|”读成“或”,称为P的一个候选式。 表示一个文法时,通常只给出开始符号和产生式,如上例,可表示为: G(E): E ? i | E+E | E*E | (E) 国防科技大学计算机系602教研室 定义:称?A?直接推出???,即 ?A????? 仅当A ? ?是一个产生式, 且?, ?? (VT ? VN)* 。 如果?1 ? ?2 ? ? ??n,则我们称这个序列是从?1到?n的一个推导。若存在一个从?1到?n的推导,则称?1可以推导出?n 。 例:对文法(1) E ? (E) ? (E+E)? (i+E)? (i+i) 国防科技大学计算机系602教研室 通常,用 表示:从?1出发,经过一步或若干步,可以推出?n。 用 表示:从?1出发,经过0步或若干步,可以推出?n。 所以 : 即 或 定义:假定G是一个文法,S 是它的开始符号。如果 ,则?称是一个句型。仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为 L(G)。 国防科技大学计算机系602教研室 从一个句型到另一个句型的推导往往不唯一。 E+E?i+E?i+i E+E?E+i?i+i 最左推导:任何一步? ? ?都是对?中的最左非终结符进行替换。 最右推导:任何一步? ? ?都是对?中的最右非终结符进行替换。 国防科技大学计算机系602教研室 2.3.2 语法树与二义性 用一张图表示一个句型的推导,称为语法树。 (i*i+i)的语法树 E ?(E) ?(E+E) ?(E*E+E) ?(i*E+E) ?(i*i+E) ?(i*i+i) E ?(E) ?(E+E) ?(E+i) ?(E*E+i) ?(E*i+i) ?(i*i+i) 一棵语法树是不同推导过程的共性抽象。 国防科技大学计算机系602教研室 如果使用最左(右)推导,则一个最左(右)推导与语法树一一对应。 一个句型是否只对应唯一一棵语法树? 国防科技大学计算机系602教研室 定义:如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的。 G(E): E ? i|E+E|E*E|(E) 是二义文法。 语言的二义性:一个语言是二义性的,如果对它不存在无二义性的文法。 可能存在G和G’,一个为二义的,一个为无二义的。但L(G)=L(G’) 国防科技大学计算机系602教研室 二义文法: G(E): E ? i|E+E|E*E|(E) 表达式 ?项|表达式+项 项 ? 因子 | 项*因子 因子 ? (表达式) | i 无二义文法: G(E):E ? T | E+T T ? F | T*F F ? (E) | i 国防科技大学计算机系602教研室 ) E E E F F T T T T i + * ( E F i i E ?T ?F ?(E) ?(E+T) ?(T+T) ?(T*F+T) ?(F*F+T) ?(i*F+T) ?(i*i+T) ?(i*i+F) ?(i*i+i) 考虑句子(i*i+i

文档评论(0)

1亿VIP精品文档

相关文档