【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )





I . 代数表达式 语法


1 . 代数表达式 语法 : G 4 = ( V , A , R , E x p r e s s i o n ) G4 = ( V , A , R , Expression ) G4=(V,A,R,Expression) 是代数表达式语法 ;


① 终端字符集 : A = { a , + , × , ( ) } A = \{ a , + , \times , () \} A={a,+,×,()} ;

② 变量集 : V = { E x p r e s s i o n , T e r m , F a c t o r } V = \{ Expression , Term , Factor \} V={Expression,Term,Factor} ;

  • E x p r e s s i o n Expression Expression 是表达式 ;
  • T e r m Term Term 是项 ;
  • F a c t o r Factor Factor 是因子 ;

2 . E x p r e s s i o n Expression Expression 表达式 规则 :

E x p r e s s i o n → E x p r e s s i o n + T e r m ∣ T e r m Expression \to Expression + Term \quad | \quad Term ExpressionExpression+TermTerm

E x p r e s s i o n Expression Expression ( 表达式 ) 可以通过 E x p r e s s i o n + T e r m ∣ T e r m Expression + Term \quad | \quad Term Expression+TermTerm 代替 ;


3 . T e r m Term Term 项 规则 :

T e r m → T e r m × F a c t o r ∣ F a c t o r Term \to Term \times Factor \quad | \quad Factor TermTerm×FactorFactor

T e r m Term Term 项 可以通过 T e r m × F a c t o r ∣ F a c t o r Term \times Factor \quad | \quad Factor Term×FactorFactor 代替 ;


4 . F a c t o r Factor Factor 因子 规则 :

F a c t o r → E x p r e s s i o n ∣ a Factor \to Expression \quad | \quad a FactorExpressiona

F a c t o r Factor Factor 因子 可以通过 E x p r e s s i o n ∣ a Expression \quad | \quad a Expressiona 代替 ;





II . 代数表达式 语法 示例


为字符串 ( a + a ) × a (a + a) \times a (a+a)×a 构建 语法分析树 ;


1 . 起始状态 : 语法的起始状态是 E x p r e s s i o n Expression Expression , 根据 E x p r e s s i o n → E x p r e s s i o n + T e r m ∣ T e r m Expression \to Expression + Term \quad | \quad Term ExpressionExpression+TermTerm 规则 , E x p r e s s i o n Expression Expression 可以使用 T e r m Term Term 替换 , 直接从起始状态 , 使用 T e r m Term Term 替换 E x p r e s s i o n Expression Expression ;

在这里插入图片描述


2 . ( a + a ) × a (a + a) \times a (a+a)×a 字符串的语法分析树 :


符号 : 其中有 × \times × 乘号 ;

语法分析树 : ( a + a ) × a (a + a) \times a (a+a)×a 中间有 × \times × , 带有 × \times × 乘号的替换规则为 T e r m → T e r m × F a c t o r ∣ F a c t o r Term \to Term \times Factor | Factor TermTerm×FactorFactor , 显然该项很显然是一个 T e r m Term Term 项 ;

在这里插入图片描述


3 . 根据上述 T e r m → T e r m × F a c t o r Term \to Term \times Factor TermTerm×Factor 可知 , T e r m Term Term 是由 T e r m × F a c t o r Term \times Factor Term×Factor 进行替换的 , 左侧的 ( a + a ) (a + a) (a+a) 是一个 T e r m Term Term , 右侧的 a a a 是一个 F a c t o r Factor Factor ;

在这里插入图片描述


4 . 根据 F a c t o r → E x p r e s s i o n ∣ a Factor \to Expression | a FactorExpressiona 规则 , 右侧的 F a c t o r Factor Factor 直接使用 a a a 进行替代 , 可得如下语法分析树 :

在这里插入图片描述


5 . 想办法将左侧的 T e r m Term Term 替换成 ( a + a ) (a + a) (a+a) :


加法只能是 E x p r e s s i o n Expression Expression , 先替换成 E x p r e s s i o n Expression Expression ;


6 . 这里先使用 F a c t o r Factor Factor 替换 T e r m Term Term : 使用规则 T e r m → T e r m × F a c t o r ∣ F a c t o r Term \to Term \times Factor | Factor TermTerm×FactorFactor ;

在这里插入图片描述


7 . 在使用 E x p r e s s i o n Expression Expression 替换 F a c t o r Factor Factor : 使用规则 F a c t o r → E x p r e s s i o n ∣ a Factor \to Expression | a FactorExpressiona ;

在这里插入图片描述


8 . 使用 E x p r e s s i o n + T e r m Expression + Term Expression+Term 替换 E x p r e s s i o n Expression Expression : 使用规则 E x p r e s s i o n → E x p r e s s i o n + T e r m ∣ T e r m Expression \to Expression + Term | Term ExpressionExpression+TermTerm ;

在这里插入图片描述


9 . 使用 T e r m Term Term 替换 左侧的 E x p r e s s i o n Expression Expression : 使用规则 E x p r e s s i o n → E x p r e s s i o n + T e r m ∣ T e r m Expression \to Expression + Term | Term ExpressionExpression+TermTerm ;

在这里插入图片描述


10 . 使用 F a c t o r Factor Factor 替换左侧的 T e r m Term Term : 使用规则 T e r m → T e r m × F a c t o r ∣ F a c t o r Term \to Term \times Factor | Factor TermTerm×FactorFactor ;

在这里插入图片描述


11 . 使用 a a a 替换左侧的 F a c t o r Factor Factor : 使用规则 F a c t o r → E x p r e s s i o n ∣ a Factor \to Expression | a FactorExpressiona ;

在这里插入图片描述


12 . 使用 F a c t o r Factor Factor 替换右侧的 T e r m Term Term : 使用规则 T e r m → T e r m × F a c t o r ∣ F a c t o r Term \to Term \times Factor | Factor TermTerm×FactorFactor ;

在这里插入图片描述


13 . 使用 a a a 替换右侧的 F a c t o r Factor Factor : 使用规则 F a c t o r → E x p r e s s i o n ∣ a Factor \to Expression | a FactorExpressiona ;

在这里插入图片描述


最终的 语法分析树为 :

在这里插入图片描述

此时可以得到语法分析树 ; 该语法分析树是一个代数表达式 ; 将该语法分析树写出 , 即可理解 上下文无关 语法 ;

代数表达式就是上下文无关的语法 ;





III . 设计 上下文无关语法


给定语言 , 设计上下文无关语法 , 使用该语法可以生成该语言 ;


上下文无关语法 设计技巧 : 将复杂的语言分解 , 化整为零 , 针对每个部分设计上下文无关的语法 , 最终将这些语法合并在一起 ;


上下文无关语法 与 自动机 : 如果给定的语言是正则语言 , 是由正则表达式表达的 , 能够找到一个自动机可以识别该语言 , 首先将语言转换成自动机 , 将自动机转化为上下文无关的语法 ;





IV . 确定性有限自动机 DFA 转为 上下文无关语法


1 . 确定性有限自动机 ( DFA ) 转为 上下文无关语法 ( CFG ) : 将 确定性有限自动机 ( DFA ) 的指令 , 转为 对应的 上下文无关语法 ( CFG ) 规则 :

δ ( q i , a ) = q j ⇒ R i → a R j \delta ( q_i, a ) = q_j \Rightarrow R_i \to aR_j δ(qi,a)=qjRiaRj

δ ( q i , a ) = q j \delta ( q_i, a ) = q_j δ(qi,a)=qj 表示 q i q_i qi 状态下 , 读取字符 a a a , 跳转到 q j q_j qj 状态 ;


在这里插入图片描述

2 . 自动机的 状态跳转 转换成 规则 示例 : 上图中的 确定性有限自动机 , 开始状态 A A A 读取 1 1 1 字符 转化成 B B B 状态 , 表示成规则就是

R A → 1 R B R_A \to 1R_B RA1RB


3 . 自动机的状态 A A A 读取 字符 a a a 转换成另一个状态 B B B , 都可以转换成对应的规则 R A → a R B R_A \to aR_B RAaRB ;


4 . 计算能力对比 : 上下文无关语法 的计算能力 要大于等于 自动机的计算能力 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值