编译原理笔记(2)

编译原理笔记(2)

第二章 高级语言及其语法描述

  • 程序语言的定义
  • 高级语言的一般特性
  • 程序语言的语法描述

——————————————————————-
了解: 形式语言概述
熟悉: 语法、语义
掌握: 上下文无关文法、语法分析与二义性
——————————————————————-

回顾上节内容:

Created with Raphaël 2.1.2 源程序(.c) 词法分析器 语法分析器 语义分析与中间代码产生器 优化器 目标代码生成器 目标代码(.obj)

1. 程序语言的定义

程序语言由两方面定义:

  • 语法 - 是描述程序的结构,根据它可以产生正确的程序。

  • 语义 - 是语言成分的含义,由程序执行的效果来说明。

  • 语用 - 是语言的实际应用。 如: x=a+b*c

举例,赋值语句

一、语法

语法
一组规则,用它可以形成和产生一个 合式(well-formed)的程序。

词法规则
单词符号的形成规则,单词符号是语言中具有独立意义的最基本结构,一般包括:常数、标识符、基本字、运算符、界符等
描述工具:有限自动机

语法规则

语法单位的形成规则,语法单位通常包括:表达式、语句、分程序、过程、函数、程序等
描述工具:上下文无关文法

  语法规则和词法规则定义了程序的形式结构。定义语法单位的意义属于语义问题。

二、语义

语义
定义一个程序的意义,所要执行的操作(相同语句可以有不同的含义)
描述方法:属性文法的语法制导翻译方法

编译程序就是从基本的单词符号和语法单位分析程序的意义。

2.高级语言的一般特性

  • 高级语言的分类
  • 程序结构
  • 数据类型与操作
    初等数据类型
    数据结构
    抽象数据类型
  • 语句与控制结构

高级语言的分类

  • 过程式语言-命令驱动,面向语句,如C语言等
  • 函数式语言-从功能出发构造函数,如LISP等
  • 基于规则的语言-检查一定的条件,当满足条件时,则执行适当的动作,如Prolog语言
  • 面向对象的语言-支持封装、继承和多态性等

3.程序语言的语法描述

几个概念
程序(Program)语句(Sentence)单词(Token)

描述形式——文法

语法——语句
语句的组成规则
描述方法:BNF范式、语法图*
词法——单词
单词的组成规则
描述方法:有限自动机、正规式**

基本概念:

Σ: 是一个有穷字母表,它的每个元素称为一个符号。
所有字母[a, b, c, d, …, z][A, B, C, D, …, Z]

Σ上的字(也叫符号串): 是指由Σ中的符号所构成的一个有穷序列。
一个单词,apple

ε:不包含任何符号的序列称为空符号串。
’ ‘

Σ*:表示Σ上所有字的集合,其中包括空符号串 ε。 单词表,该单词表包括空字符串

φ: 不包含任何元素的集合,φ={ } 一张白纸


UV ———— 两个小单词表

∑*的子集U和V的连接(积)定义为
    UV = { α·β | α ∈ U & β ∈ V }
    所有两个单词构成的词组

V自身的 n次积记为
Vn=VVV

整本字典里的单词和词组

规定 V0={ε} ,令

V=V0V1V2V3

V 是V的闭包;

VVV ,称 V+ 是V的正(规)闭包。

???闭包是否就是一种语言(体系),比如说汉语,英语…

设:
  

U={a,aa}

那么:
  

={ε,a,aa,aaa,aaaa,...}

  
U+={a,aa,aaa,aaaa,...}

U+=U1U2U3U4U...
称为集合U的 正闭包
U=U0U+
称为集合U的 闭包

1.上下文无关文法

文法
描述语言的语法结构的形式规则
特点:规则准确,易于理解,描述能力强

上下文有关文法:自然语言
上下文无关文法:算术表达式,赋值语句,条件语句, …

上下文无关文法
其定义的语法范畴独立于其原环境,包括以下四个部分
- 一组 终结符号,就是 基本符号:基本字,标识符,常数,算符,界符
- 一组 非终结符号,代表语法范畴(语法小环境):语句,表达式
- 一个 开始符号:语法范畴常称为”句子”或”程序”
- 一组 产生式,定义语法范畴的一种书写规则,如A->a
形式化定义
    (VT,VN,S,P)

VT : 终结符号的集合
VN : 非终结符号的集合
S : 一个非终结符号
P : 产生式的集合,P->a

SVNPVN
Pa1|a2|a3|...|an

上下文无关文法语言
从文法的开始符号出发,递归替换和展开
定义 αAβ 直接推出 αγβ ,即
αAβαγβ ,仅当A→γ是一个产生式且 αβ(VTUVN)

最左推导
施于 最左的那个非终结符号以替换(我的理解,最先固定左边的符号含义)
最右推导
施于 最右的那个非终结符号以替换(我的理解,最先固定右边的符号含义)

2.语法分析数与二义性

语法数
用一张图表示一个句型的推导

句型推导 == 语法数的生长过程

二义文法
一个文法中某个句子对应两颗不同的语法树

上下文无关文法的限制

  • 文法中不含这种式子 P→P
  • 每个非终结符号P都必须有用处
  • 对于P不存在永不终结的回路

3.形式语言鸟瞰

0 型文法
原始 ——→ 图灵机

1 型文法
上下文有关文法 ——→ 线性有限自动机

2 型文法
上下文无关文法 ——→ 不确定的下推自动机

3 型文法
正规文法 ——→ 有限自动机

你可能感兴趣的:(编译)