第一章&第二章 引论与语法描述介绍
编译程序:把某一种高级语言程序等价地转换为另一种低级语言程序(如汇编或机器码)的程序
描述词法规则的有效工具是:正规式(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