3第三章 上下文无关文法及分析2.pdfVIP

  • 21
  • 0
  • 约6.58千字
  • 约 39页
  • 2018-10-19 发布于山东
  • 举报
主要内容 文法及语言的表示及定义 分析过程 分析树与抽象语法树 二义性 文法的扩展表示:EBNF和语法图 TINY语言的语法 • 句型的分析,是指构造一种算法,用以判断所给的 符号串是否为某一文法的句型(或句子)。 • 对于一给定的文法来说,从其开始符号到某一句 型,或从一个句型到另一句型间的推导序列可能不 唯一。 • 例如 G[E]={E→E+T|T, T→T*F|F, F→(E)|i },其句型i+i*i有如下的推导序 列: • 最左(右)推导,是指对于一个推导序列中的每一 直接推导,被替换的总是当前符号串中的最左 (右)非终结符。最右推导称为规范推导。 • 上例序列一、序列二就分别为最左推导和最右推 导。 • 推导的逆过程称为为归约。规范推导的逆过程称为 为规范归约。 • 语法分析——句子分析——如何存储分析过程? • 句子的组成——BNF规则——递归 分析过程是递归的 使用递归的树形结构(分析树)来存储分析过程 • 分析输出也可以是中间代码甚至目标代码。一般假 定分析的输出为直观、形象的分析树,在此基础上 加上相应语义分析,便得到真正的中间代码或目标 代码。 • 文法G= (VN ,VT ,P,S )下的分析树具有以下 特征: 根结点标记为文法的开始符号S; 每个节点上的标记都是V=VNVT 中的一个符号; 如果一棵子树的根标记为A ,且其所有直接后代节 点从左向右排列的顺序为A A ,…A ,那么 1 2 k A→A ,A ,…A 是P中的一个产生式; 1 2 k 如果T1是根节点的唯一子树,且其标记为,则有S →在P中; • 如果树的所有端末节点(叶子)上的标记从左向右 排列为字符串w ,则w是G的句型,若w 中仅含终结 符,则它为G所产生的句子。 • 对于一个给定的文法和一个句型,如何构造一棵与 该句型推导相应的分析树? • 现以文法G[E]={E→E+T|T,T→T*F|F,F→(E)|i }和句 型i+i*i来说明分析树的构造步骤。 由于句型i+i*i一个推导为: EE+TT+TF+Ti+Ti+T*Fi+F*Fi+i*F i+i*i 则分析树的构造过程如下:以开始符号E作为分析 树的根结点,对于第一个推导EE+T,则可以画 出三个分支,分支的标记从左到右分别为E、+、 T,即得到取代E的符号串E+T;从将被替换的E出 发,向下画分支,。 • 文法G的句型 • 短语:子树的末端结点(叶子)形成的符号串(相 对于子树的根)。 • 简单短语:只有父子两代的子树的末端结点(叶 子)形成的符号串。 • 句柄:最左的简单短语。 • 总结: (1)优点:分析树(parse tree)反映推导的全 程,信息齐全。 (2 )缺点:太复杂、耗时 (3 )解决办法:压缩存储对后续阶段有用的信息 例子: exp →exp op exp | (exp) | number op →+ | - | * 符号串(number - number)*number和表示式 (34-3 )*42 的分析树? 语法树 • 特点:分析树表示所有推导步骤;语法树只保留对 后续分析有用的信息,无法还原记号序列,但效率 更高。 • 算术表达式对应抽象语法树的C数据类型说明: typedef enum {Plus, Minus, Times} OpKind; typedef enum {OpKind, ConstKind} ExpKind; typedef struct streenode { ExpKind kind; OpKind op;//可用union将kind和op合一以节省空间。 struct streenode * lchild, *rchild; i

文档评论(0)

1亿VIP精品文档

相关文档