[编译原理学习笔记2-2] 程序语言的语法描述

[编译原理学习笔记2-2] 程序语言的语法描述

对于高级程序语言及编译程序而言,语言的语法定义是非常重要的。

一些先导概念:设 Σ \Sigma 是一个有穷字母表,它的每个元素称为一个符号 Σ \Sigma 上的一个符号串是指由 Σ \Sigma 中的符号所构成的有穷序列。不包含符号的序列称为空字,记为 ϵ \epsilon 。用 Σ \Sigma^* 表示 Σ \Sigma 上的所有符号串的全体,空字也包括在其中。

Σ \Sigma^* 的子集U和V中的 (连接)积 定义为: U V = { α β α U & β V } UV=\{ \alpha\beta∣\alpha∈ U \, \& \, \beta∈ V \}
规定 V 0 = { ϵ } V^0=\{\epsilon\}

[2.3.1] 上下文无关文法

文法是描述语言的语法结构的形式规则(即语法规则)。
归纳起来,一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式

  • 终结符号:是组成语言的基本符号,即在程序语言中以前屡次提到的单词符号,如基本字,标识符,常数,算符和界符等
  • 非终结符号(也称语法变量):用来代表语法范畴。如“算术表达式”、“布尔表达式”、“过程”等
  • 开始符号:是一个特殊的非终结符号
  • 产生式(也称为产生规则或简称规则):是定义语法范畴的一种书写规则。形式是 A > α A->\alpha

一个产生式并不足以定义一个语法范畴,特别是需要含有递归的表达式

假定G是一个文法,S是它的开始符号。如果S=>* α \alpha (表示从S出发,经0步或若干步可推出 α \alpha ),则称 α \alpha 是一个句型仅含终结符号的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为L(G).
L ( G ) = α S = > + α & α V t L(G)={\alpha|S =>^+ \alpha \,\&\, \alpha∈Vt^* }

形式上定义一个上下文无关文法G是一个四元式(Vt,Vn,S,£)

  • Vt是一个非空有限集,它的每一个元素 称为终结符号;
  • Vn是一个非空有限集,它的每一个元素称为非终结符号,Vt∩Vn=空;
  • S是一个非终结符号,称为开始符号;
  • £是一个产生式(有限)集合
  • 所谓最左推导是指:任何一步 α = > β \alpha=>\beta 都是对 α \alpha 中的最左非终结符进行替换的。同样,可定义最右推导。

  • 有助于理解的一个推导

  • 有助于理解的一个例题

一些用到的符号:
双箭头:推导号
单箭头:生成式的符号
| :或

一些理解:就是没有这个非终结符就没法开始推导应该就是开始符号
开始符号能推出的所有,都叫句型
文法的开始符号也是一个句型(此时是零步推导,推他自己(即没有推))
开始符号只有一个(推导的起始,是一个左部符号)

[2.3.2] 语法分析树与二义性

可以用一张图表示一个句型的推导,这种表示称为语法分析树,或简称语法树
语法树的根结点开始符号所标记。在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结点自左至右排列起来就是一个句型

  • 何谓二义性?如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。也就是说,若一个文法存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义的。

[2.3.3] 形式语言鸟瞰

乔姆斯基把文法分为四种类型即0型、1型、2型、3型(0行强于1型,1行强于2型,2型强于3型)。

了解即可

后记

重点是推导、语法树、二义性,概念需要理解

发布了23 篇原创文章 · 获赞 18 · 访问量 3168

猜你喜欢

转载自blog.csdn.net/TalesOV/article/details/104507857
今日推荐