VectorLu

C_Compiler_by_C

编译原理基础知识总结

CH1 编译概述

TODO

CH2 文法和语法的基础知识

TODO:6 文法和语言的分类

0 型文法(无限制文法)

关键在于𝜷可以为空

1 型文法(上下文有关文法)

1
𝜶𝑨𝜷 → 𝜶𝑢𝜷

2型文法(上下文无关文法)

CH3 词法分析与有穷自动机

词法分析程序的功能

字符串表示的源程序从左到右进行扫描和分解,根据语言的词法规则识别出一个一个具有独立意义的单词符号。

单词符号及输出单词的形式

词法分析程序的:

  • 输入:字符串形式的源程序
  • 输出:单词符号 or 单词符号表示的源程序

语言的单词符号 token

语言中具有独立意义的最小语法单位,分为以下 5 种:

  1. 关键字if else while do

  2. 标识符,比如变量名、常量名、数组名、函数名等等

  3. 常数,比如

    • 整型常数 125
    • 实型常数 0.718
    • 布尔型常数 TRUE

      等等

  4. 运算符+ - * / < 等等

  5. 界符
    , ; ( ) : 等等

一个程序语言的关键字、运算符和界符的个数是确定的,而对于标识符或常数的使用个数通常是不确定的。

词法分析程序输出单词的形式

二元式:

1
(单词种别,单词自身的值)

单词种别

单词种别表示单词的种类,是语法分析需要的信息。

一个语言的单词符号如何划分种类、分成几个种类、怎样编码,取决于处理方便。通常让每种单词对应一个整数码,最大限度地把各个单词区别开。

  1. 关键字:全体视为一种,但一般一字一种(个数确定)
  2. 运算符:同关键字
  3. 界符:同关键字
  4. 标识符:统归为一种
  5. 常数:可按类型(整型、实型、布尔型等等),也可统归为一种,比如

    1
    (+|-|ɛ)dd*(.dd*|ɛ)(e(+|-|ɛ)dd*|ɛ)

单词自身的值

单词自身的值是编译中其他阶段所需要的信息。

用以下方法确定其值:

  1. 如果一个种别只含一个单词符号,那么对于这个单词符号,种别编码完全代表其自身的值。
  2. 如果一个种别又多个单词符号,那么对于它的每个单词符号,除了给出种别编码之外,还应

    1. 给出单词符号的自身值,以便把同一种类的单词区分开来。

      标识符的自身值:标识符自身的字符串

      常数自身值:常数本身的二进制数值

    2. 用指向某类表格中一个特定项目的指针值来区分同类中不同单词

      标识符:在符号表的入口指针作为它自身的值

      常数:在常数表的入口指针作为自身值

假设关键字、运算符和界符都是一符一种,标识符自身的值用自身的字符串表示,常数自身的值用标准二进制形式表示,则程序段if (a > 1) b = 100;在经词法分析程序扫描后,它所输出的单词符号串是:

二元式 表示的意义
(2, ) 基本字if
(29, ) 左括号(
(10, ‘a’) 标识符a
(11, ‘1’的二进制) 常数1
(30, ) 右括号)
(10, ‘b’) 标识符b
(17, ) 赋值号=
(11, ‘100’的二进制) 常数100
(26, ) 分号;

其中,假设标识符种类编码为整数 10,常数的种类编码为整数 11,基本字if种类编码为 2,赋值号种类编码为……

语言单词符号的两种定义方式

  1. 正规文法
  2. 正规式

TODO

CH4 语法分析

文法的左递归性和回溯的消除

在自上而下分析过程中,为了避免回溯,即要求描述语言的文法是 LL(1) 文法。

LL(1) 文法的判断条件

1

𝜶

TBC

预测分析法与预测分析表的构造

方法

  1. 计算文法 G 的每一非终结符的 FIRST 集和 FOLLOW 集。
  2. 对文法的每个规则 𝑨⟶𝛼,若a ∈ FIRST(𝛼),则置 M[A, a] = 𝑨⟶𝛼,显然其中 a 是终结符。
  3. 若 𝜺 ∈ FIRST(𝛼),则 ∀ b ∈ FOLLOW(A),则置 M
您的支持将鼓励我继续创作!

热评文章