编译原理_复习笔记1-2章

第一章&第二章 引论与语法描述介绍

编译程序:把某一种高级语言程序等价地转换为另一种低级语言程序(如汇编或机器码)的程序

描述词法规则的有效工具是:正规式(r)和有限自动机(DFA)

标识符是语义概念,名字是语法概念

语法

  • 词法规则(描述工具:有限自动机):一般包括常数、标识符、基本字、算符,界符等
  • 语法规则(描述工具:上下文无关文法):通常包括表达式、语句、分程序、过程、函数、程序等

语法规则词法规则定义了程序的形式结构

最左推导:任何一步 α => ß 都是对α中最左非终结符进行替换

最右推导(规范推导):任何一步 α => ß 都是对α中最右非终结符进行替换,由规范推导所得的句型称为规范句型

符号表达与概念

  • E:算术表达式
  • i:变量
  • 句型:设有文法G,S是它的开始符号。如 S=*=>α (从文法开始符号开始经过若干步推导推出α:包括一步推出S=>α和多步推出S=+=>α)则α称是一个句型,这里α可以是终结符和非终结符组成的串。
  • 句子:仅含终结符的句型是一个句子
  • 语言:文法产生的句子的全体是一个语言(假定G是一个文法,文法G所产生的句子的全体是一个语言,将它记为 L(G)。)
  • 遍(pass):把源文本从头到尾扫描一遍
  • 开始符(一般用大写字母表示)是非终结符(就是还能继续推)
  • 终结符则无法再推
  • 文法的推导说白了就是从句型推到句子,因为句子都是终结符。

(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

文法分类

  • 0型(短语文法,图灵机),最宽泛:产生式形如 α -> ß,α ∈ (Vt ∪ Vn)^* 且至少含有一个非终结符(一说 α 只需含有1-2个非终结符); ß ∈ (Vt ∪ Vn)^*
  • 1型(上下文无关文法,线性界限自动机),只要左边比右边短:产生式形如 α -> ß, |α| ≤ |ß|, 仅 S -> ℇ 例外
    • 在0型基础上要求 α长度(|α|) ≤ ß长度(|ß|)
    • 是0型文法的特例
  • 2型(上下文无关文法,非确定下推自动机),左边更短,只有一个非终结符:产生式形如 A -> ß,A ∈ Vn(即左边一定是一个非终结符),ß ∈ (Vt ∪ Vn)^*(表示终结符和非终结符组成的闭包,即右边可以是终结符和非终结符组成的任意长度的串)
    • 左边只能是非终结符(大写字母)
    • 右边是终结符和非终结符组成的串
    • 是1型文法的特例
  • 3型(正规文法,有限自动机),不仅左边只有一个非终结符,右边【要么是一个终结符一个非终结符】、【要么是一个非终结符一个终结符】或【只有一个终结符】
    • 之所以由αB和Bα两种,是因为分右线性非终结符在右边终结符在左边)和左线性文法(非终结符在左边终结符在右边
    • 产生式形如 A -> αB 或 A -> Bα 或 A -> α, α ∈ Vt^*, A、B ∈ Vn
    • 说白了就是等号右边长度在[1, 2]之间,长度是1的时候就必须是终结符,长度是2的时候可以有一个非终结符一个终结符,不能有串。有串就退化成2型文法了。
    • 比如E = E * E就不是3型文法,右边长度为3了!

现今程序设计语言的语言结构,用上下文无关文法描述就足够了。做编译器要用到的两种文法:2型和3型。2型文法是第4章语法分析时要用的:即文法识别的时候用的是非确定的下推自动机,做语法分析。3型文法可以用来做词法分析,比2型文法限制更多,是2型文法的特例。

规定V^0 = {ℇ},令 V^* = V^0 ∪ V^1 ∪ V^2 ∪ V^3 ∪ … 称 V^* 是 V 的闭包;

记 V^+ = VV^* ,称V^+是V的正规闭包。

用一张图表示一个句型的推导,称为语法树。如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的。

语言的二义性:一个语言是二义性的,如果对它不存在无二义性的文法。

(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)


visitor tracker
访客追踪插件


猜你喜欢

转载自blog.csdn.net/S_gy_Zetrov/article/details/81751133
1-2