✏️

[Pre] 形式语言与自动机

Created
Sep 6, 2024 12:10 AM
空字符:εa = a
正闭包:A+ = ∪A^n (n ≥ 1)
克林闭包:A* = A^0 ∪ A+
 
字母表
符号串:字符的有序序列
 
语言L
句子 字母表的闭包的子集
 
 
语法
语法规则示例:
notion image
根据语法规则后可以推导出句子,将每个非终结符号(如上图主语谓语)开始向下推导至全为终结符号
最后用规则的右部替换左部得到一个具体的句子
一般遵循最左推导原则
推导过程可以可视化为一颗语法(推导)树
notion image
 
 
文法的形式定义
文法G=(Vn,Vt,P,Z) Vn:非终结符号集 Vt:终结符号集 P:产生式或规则的集合 Z:开始符号(识别符号,即识别它是否为句子时的起始符号) Z∈Vn
(V = Vt + Vn,称为语言的符号)
 
构造文法:对于一个语言L,找到文法四要素
技巧
  • 枚举
    • 对有限集合适用
  • 重复构造
    • S → bS | b
    • 对无穷且数量无关适用
  • 对称
    • S → 0S1
    • 控制数量
 
递归语法
 
句型
由语法规则规范推导出来的东西(VT和VN混在一起的东西)
只含有终结符VT的句型叫句子
 
短语
对于句型xuy,若句型xUy 可以多步(+)推导出xuy,则u为U的短语
 
简单短语
短语的多部推导 → 单步推导
 
句柄
对于句型的最左简单短语
 
一般用语法推导树来找,即圈出句型构成的node,从根节点开始遍历每个节点是否为句型中某个成分的公共祖先节点
 
 
规范(最左)规约:从最左终结符开始向上还原为上层(最右推导的逆过程)
 
文法二义性
对同一句子,可能有不同的推导树可以推导出来,这种现象称为文法的二义性
若对于一个文法的某一句子(或句型)存在两棵不同的语法树,则有二义性
对于一个文法,若该文法推导出来的同一规范句型的句柄不同,则有二义性
文法二义性是不可判定的,只能提出一些限制条件(无二义性的充分条件)
eg. 按照优先级从低到高,添加符号层次
notion image
 
 
多余规则
始终用不到的
加上其他规则,迭代下去也永远推不出终结符号的
 
乔姆斯基文法定义
四要素同,语法规则有区别
语法规则分为几类,数字越大越严格
  • 0型:u ::= v, u ∈ V+, v ∈ V*
    • 短语结构文法,符号串 → 符号串
  • 1型:xUy ::= xuy, U∈Vn, x、y、u∈V*
    • 上下文有关,仅在xUy结构下可以产生U → u
  • 2型:U::=u, U ∈ Vn, u∈V*
    • 上下文无关语法,等价于BNF表示
  • 3型:U::=t 或 U::=tW(右线性) 或 Wt(左线性),其中U, W ∈ Vn,t∈Vt
    • 正则文法,可以被有穷状态机接受