编译原理 第二章 形式语言基础

形式语言是符号串集合

Q:什么是形式语言 , 字母表 , 符号串 ?

形式语言是句子的集合 , 一种语言用\(L\)表示
字母表是句子的所有可能元素
符号串是字母表中元素的有限序列
形式语言可以理解为一种语言 , 只要符合一定规则的句子(比如主谓宾)都是这种语言的组成部分

Q:什么是规则 , 符号串集合 , 句型 ?

符号串集合即符号串的集合(废话)
规则显然 , 举个例子 "我是人" , "她是老师" , 都满足主谓宾的规则
句型是表示一类句子的方式 , 如\(b^n\)表示\(\varepsilon , b , bb , bbb......\)

符号串的运算

Q:哪些运算 ?

符号串运算 : 连接 , |(或) , \(a^n\) , 闭包\(a^+\)\(a^*\)

符号串集合运算 : \(+\) ,笛卡尔积 , \(A^n\) , 闭包(基本同上)

集合的\(0\)次幂为\({\varepsilon}\) , 空串

符号串集合的文法描述

Q:什么是文法 ?

通过文法可以实现对特定规则符号串的筛选 , 进而表达语言\(L\)

形式语言由文法定义的

什么是上下文无关文法

Q :什么是上下文无关文法 ?

一个左部推出右部 , 表示为\((V_N,V_T,S,P)\) , 这个挺简单不展开讲

文法如何定义语言

Q :如何用文法定义语言 ?

\(L(G) = {x | S \leftarrow x \in V^*}\)
即 , G(S)为文法 , S为初始符 , L(G)为通过S能推导出的属于字典序闭包的所有句子的集合

Q : 如何写一个识别标识符的文法 ?

\(S \leftarrow lA | l\) , $A \leftarrow lA | dA | \varepsilon $
类似也可以写出识别整数 , 识别小数 , 识别科学技术法等

Q : 如何写一个识别简单算术表达式的文法 ?

我们考虑一个算术表达式类\(E\) , 必然是由\(E +-*/ E\)或者\((E)\)组成的

为了区分运算级别 , 考虑将\(+-\)作为一类 , \(*/\)作为第二类


\( E \leftarrow E w_1 E \quad E \leftarrow E w_2 E \quad E \leftarrow (E) \quad E \leftarrow T \quad T \leftarrow 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 \quad \)
当然 , 这里其实有些问题 , 比如二义性等 , 但是现在先不考虑

主要语法成分的定义

文法的运算问题

文法有两种基本运算 : 推导 , 规约

直接推导 , 加推导 , 星推导等略

句型 , 句子和语法树

Q : 重新回答 , 句型 , 句子是什么 ?

句型\(S\)加推导得到的式子 , 语法树上所有叶子节点的连接
句子是句型的子集 , 满足所有元素都为终极符

Q : 什么是语法树 ? 简单子树是什么 ?

句型(句子)产生过程的一种树结构表示
树根为\(S\)开始符号 , 树叶为给定句型(句子)

简单子树 : 指仅具有单层分支的子树 , 就是只有两层

Q : 什么是短语 , 简单短语 , 句柄 ?

短语为任意子树的所有叶子的连接 ;
简单短语为简单子树的所有叶子的连接 ;
句柄为最左侧的简短短语

两种特性文法

递归文法

Q:什么是递归文法 ?

\(A \leftarrow xAy\) , 则称文法具有递归性
特别 , 有直接左递归和直接右递归

二义性文法

即同一种句型有多种语法树 , 就会存在二义性

文法的等价变换

文法的等价性

Q : 如何判断两个文法是相同的 ?

如果两个文法 G1 和 G2 产生的语言一样 , 即\(L(G1) = L(G2)\) , 那么就是等价

文法变换方法1

Q : 如何让文法更加简洁 ?

删除无用产生式 , 删除\(\varepsilon\)表达式 , 文法变化

Q : 如何进行文法的化简 ?

自定己 , 不终结 , 不可用 del
第一个很简单不说了
第二个为从后往前推 , 第三个为从前往后推

文法变换方法2

Q : 三种变换方法 ?

  1. 必选项法 : \(A \leftarrow a (x|y)\)
  2. 可选项法 : \(A \leftarrow x[y]\)
  3. 重复可选项法 : \(A \leftarrow x{y}\)

形式语言的分类

Q : 形式语言可以分成什么 ?

  1. 0型语言由0型文法定义 , 无限制文法
  2. 1型语言由1型文法定义 , 上下文有关文法 , 左侧只能一个非终极符
    3.同 , 上下文无关文法 , 左侧只有一个非终极符
    4.同 , 正规文法 , 右侧只有一个非终极符
posted @ 2025-04-25 16:42  Guaninf  阅读(30)  评论(0)    收藏  举报