编译原理2——高级语言及其语法描述

本文概述了程序语言的基础概念,包括语言的定义、语法的构造(如词法规则和上下文无关文法)、语义的重要性,以及高级语言的特性(如分类、数据类型操作和控制结构)。同时讨论了语法分析树和语言的二义性问题,以及不同类型的文法如上下文有关和无关文法。
摘要由CSDN通过智能技术生成

u1s1,这一章真没啥东西,但为了内容完整性,还是发了

2.1 程序语言的定义

2.1.1 语法

  1. 字母表
  2. 合式
    依照词法规则和语法规则构建的字符串
  3. 词法规则
  4. 语法规则/产生规则
  5. 单词符号
  6. 语法范畴/语法单位

2.1.2 语义

  1. 语义
  2. 语义规则
    一组规则,用于定义一个程序的意义
  3. 数据
  4. 运算
  5. 程序
  6. 逻辑
  7. 实现

词法规则:有限自动机
语法规则:上下文无关文法
⋆ \star 名字是语法概念,标识符是语义概念
标识符 → B i n d i n g ( 绑定 ) 名字 标识符\xrightarrow{Binding(绑定)}名字 标识符Binding(绑定) 名字
根据编译器的不同,绑定有时发生在编译阶段,有时发生在运行阶段

程序语言的基本功能

描述数据和对数据的运算

2.2 高级语言的一般特性

2.2.1 高级语言的分类

  1. 强制式语言
    FORTRAN、C
  2. 应用式语言
    LISP
  3. 基于规则的语言
    Prolog
  4. 面向对象的语言
    Python、C++
    1. 封装性
    2. 继承性
    3. 多态性

2.2.2 程序结构

2.2.3 数据类型与操作

  1. 数值数据
  2. 逻辑数据
  3. 字符数据
  4. 指针类型
  5. 标识符
  6. 属性
  7. 类型和作用域
  8. 数组
    1. 下标
    2. 下标变量
    3. 确定数组
    4. 可变数组

语句与控制结构

  1. 单元
  2. 左值
  3. 右值

2.3 程序语言的语法描述

  1. 字母表
    Σ \Sigma Σ
    有穷
    1. 符号
    2. 符号串
      Σ \Sigma Σ上的符号串:由 Σ \Sigma Σ上符号构成的有穷序列
    3. 空字
      ε \varepsilon ε
      注意,空字是字符串
  2. Σ ∗ \Sigma^* Σ
    Σ \Sigma Σ上所有字符串的全体
    ε ∈ Σ ∗ \varepsilon\in\Sigma^* εΣ
    1. 空集
      ϕ = { } \phi=\{\} ϕ={}
      ⋆ \star 注意区分 ε \varepsilon ε { } \{\} {} { ε } \{\varepsilon\} {ε}的区别
  3. 连接
    U V = { α β ∣ α ∈ U & β ∈ V } UV=\{\alpha\beta|\alpha\in U\&\beta\in V\} UV={αβαU&βV}

  4. V n = V V V ⋯ V V^n=VVV\cdots V Vn=VVVV
  5. 闭包
    V ∗ = V 0 ∪ V 1 ∪ V 2 ∪ V 3 ∪ ⋯ V^*=V^0\cup V^1\cup V^2\cup V^3\cup\cdots V=V0V1V2V3
  6. 正则闭包
    V + = V V ∗ V^+=VV^* V+=VV
    如果 ε ∈ V \varepsilon\in V εV,则 V + = V ∗ V^+=V^* V+=V

2.3.1 上下文无关文法

  1. 文法
  2. 形式规则
  3. 上下文无关文法
    G = ( V T , V N , S , P ) G=(V_T,V_N,S,P) G=(VT,VN,S,P)
    1. 终结符号
      V T V_T VT,非空,终结符集合
    2. 非终结符号
      V N V_N VN,非空,非终结符集合
      ⋆ \star V T ∩ V N = ϕ V_T \cap V_N=\phi VTVN=ϕ
    3. 开始符号
      S S S,文法开始符号
    4. 产生式
      P P P,产生式
      形式: P → α P\rightarrow\alpha Pα,其中, P ∈ V N P\in V_N PVN V N ∈ ( V T ∪ V N ) ∗ V_N\in (V_T\cup V_N)^* VN(VTVN)
      缩写: P → α 1 ∣ α 2 ∣ α 3 ⋯ P\rightarrow \alpha_1|\alpha_2|\alpha_3\cdots Pα1α2α3
    5. 左部符号
      P P P
    6. 右部
      α \alpha α
    7. 候选式
      α \alpha α P P P的候选式
    8. 元语言符号
      → \rightarrow :定义为
      ∣ | :或
  4. 直接推出
    α A β ⇒ α γ β \alpha A\beta\Rightarrow \alpha\gamma\beta αAβαγβ
    A → γ A\rightarrow \gamma Aγ是产生式, α 、 β ∈ ( V T ∪ V N ) ∗ \alpha、\beta\in (V_T\cup V_N)^* αβ(VTVN)
    1. 推导
      1. α 1 ⇒ ∗ α n \alpha_1\xRightarrow{*}\alpha_n α1 αn
        α 1 \alpha_1 α1出发,经0步或若干步可以推导处 α n \alpha_n αn
      2. α 1 ⇒ + α n \alpha_1\xRightarrow{+}\alpha_n α1+ αn
        α 1 \alpha_1 α1出发,经1步或若干步可以推导处 α n \alpha_n αn
  5. 句型
    S ⇒ ∗ α S\xRightarrow{*}\alpha S α,则称 α \alpha α S S S的句型
    1. 句子
      如果 α \alpha α仅含终结符,则 α \alpha α为句子
      1. 语言
        L ( G ) L(G) L(G)
        文法G产生的句子的全体
  6. 最左推导
    每一步均对最左非终结符进行替换
  7. 最右推导
    每一步均对最右非终结符进行替换

2.3.2 语法分析树与二义性

  1. 语法分析树/语法树
    语言二义性:所有文法都是二义的,自然语言是二义的
    语法二义性:一个文法存在某个句子对应两棵不同的语法树

2.3.3 形式语言鸟瞰

  1. 短语文法
  2. 上下文有关文法
  3. 上下文无关文法
  4. 右线性文法
  5. 左线性文法
  6. 正规文法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值