离散数学-算术表达式-递归定义

定义

Arithmetic expressions like 3 x 2 + 2 x + 1 3x^{2}+2x+1 3x2+2x+1 involving only one variable x x x. We’ll refer to the data type of such expressions as Aexp ⁡ \operatorname{Aexp} Aexp.

  • Base cases:
    • The variable x ∈ Aexp ⁡ x\in\operatorname{Aexp} xAexp.
    • The arabic numeral k ∈ Aexp ⁡ k\in\operatorname{Aexp} kAexp for any nonnegative integer k k k.
  • Constructor cases: If e , f ∈ Aexp ⁡ e, f\in\operatorname{Aexp} e,fAexp, then
    • [ e + f ] ∈ Aexp ⁡ [e+f] \in\operatorname{Aexp} [e+f]Aexp.
    • [ e ∗ f ] ∈ Aexp ⁡ [e*f] \in\operatorname{Aexp} [ef]Aexp.
    • − [ e ] ∈ Aexp ⁡ -[e] \in\operatorname{Aexp} [e]Aexp.

CFG文法

G = ( N , T , P , S ) G = (N, T, P, S) G=(N,T,P,S)
其中:

  • N = { E } N = \{E\} N={E}
  • T = { x , num , + , ∗ , − , [ , ] } T = \{\text{x}, \text{num}, +, *, -, [, ]\} T={x,num,+,,,[,]}
  • S = E S = E S=E 是开始符号
  • P P P 是产生式集合:
    1. E → x E \rightarrow \text{x} Ex
    2. E → num E \rightarrow \text{num} Enum
    3. E → [ E + E ] E \rightarrow [ E + E ] E[E+E]
    4. E → [ E ∗ E ] E \rightarrow [ E * E ] E[EE]
    5. E → − [ E ] E \rightarrow - [ E ] E[E]

示例

示例1:推导 [ [ 3 ∗ [ x ∗ x ] ] + [ [ 2 ∗ x ] + 1 ] ] [[3*[x*x]] + [[2*x] + 1]] [[3[xx]]+[[2x]+1]]

E ⇒ [ E + E ] 目标表达式最外层是加法,应用规则 3 ⇒ [ [ E ∗ E ] + E ] 左边的  E  是乘法  [ 3 ∗ [ x ∗ x ] ] ,应用规则 4 ⇒ [ [ num ∗ E ] + E ] 左边乘法的第一个因子是 3,应用规则 2 ⇒ [ [ 3 ∗ E ] + E ] 将 num 替换为 3 ⇒ [ [ 3 ∗ [ E ∗ E ] ] + E ] 乘法的第二个因子是  [ x ∗ x ] ,应用规则 4 ⇒ [ [ 3 ∗ [ x ∗ E ] ] + E ] 内部乘法的第一个因子是 x,应用规则 1 ⇒ [ [ 3 ∗ [ x ∗ x ] ] + E ] 内部乘法的第二个因子是 x,应用规则 1 ⇒ [ [ 3 ∗ [ x ∗ x ] ] + [ E + E ] ] 右边的  E  是加法  [ [ 2 ∗ x ] + 1 ] ,应用规则 3 ⇒ [ [ 3 ∗ [ x ∗ x ] ] + [ [ E ∗ E ] + E ] ] 右边加法的第一个加数是  [ 2 ∗ x ] ,应用规则 4 ⇒ [ [ 3 ∗ [ x ∗ x ] ] + [ [ num ∗ E ] + E ] ] 乘法的第一个因子是 2,应用规则 2 ⇒ [ [ 3 ∗ [ x ∗ x ] ] + [ [ 2 ∗ E ] + E ] ] 将 num 替换为 2 ⇒ [ [ 3 ∗ [ x ∗ x ] ] + [ [ 2 ∗ x ] + E ] ] 乘法的第二个因子是 x,应用规则 1 ⇒ [ [ 3 ∗ [ x ∗ x ] ] + [ [ 2 ∗ x ] + num ] ] 右边加法的第二个加数是 1,应用规则 2 ⇒ [ [ 3 ∗ [ x ∗ x ] ] + [ [ 2 ∗ x ] + 1 ] ] 将 num 替换为 1 \begin{align*} E &\Rightarrow [E + E] && \text{目标表达式最外层是加法,应用规则 3} \\ &\Rightarrow [[E * E] + E] && \text{左边的 } E \text{ 是乘法 } [3 * [x * x]],\text{应用规则 4} \\ &\Rightarrow [[\text{num} * E] + E] && \text{左边乘法的第一个因子是 3,应用规则 2} \\ &\Rightarrow [[3 * E] + E] && \text{将 num 替换为 3} \\ &\Rightarrow [[3 * [E * E]] + E] && \text{乘法的第二个因子是 } [x * x],\text{应用规则 4} \\ &\Rightarrow [[3 * [\text{x} * E]] + E] && \text{内部乘法的第一个因子是 x,应用规则 1} \\ &\Rightarrow [[3 * [\text{x} * \text{x}]] + E] && \text{内部乘法的第二个因子是 x,应用规则 1} \\ &\Rightarrow [[3 * [\text{x} * \text{x}]] + [E + E]] && \text{右边的 } E \text{ 是加法 } [[2 * x] + 1],\text{应用规则 3} \\ &\Rightarrow [[3 * [\text{x} * \text{x}]] + [[E * E] + E]] && \text{右边加法的第一个加数是 } [2 * x],\text{应用规则 4} \\ &\Rightarrow [[3 * [\text{x} * \text{x}]] + [[\text{num} * E] + E]] && \text{乘法的第一个因子是 2,应用规则 2} \\ &\Rightarrow [[3 * [\text{x} * \text{x}]] + [[2 * E] + E]] && \text{将 num 替换为 2} \\ &\Rightarrow [[3 * [\text{x} * \text{x}]] + [[2 * \text{x}] + E]] && \text{乘法的第二个因子是 x,应用规则 1} \\ &\Rightarrow [[3 * [\text{x} * \text{x}]] + [[2 * \text{x}] + \text{num}]] && \text{右边加法的第二个加数是 1,应用规则 2} \\ &\Rightarrow [[3 * [\text{x} * \text{x}]] + [[2 * \text{x}] + 1]] && \text{将 num 替换为 1} \end{align*} E[E+E][[EE]+E][[numE]+E][[3E]+E][[3[EE]]+E][[3[xE]]+E][[3[xx]]+E][[3[xx]]+[E+E]][[3[xx]]+[[EE]+E]][[3[xx]]+[[numE]+E]][[3[xx]]+[[2E]+E]][[3[xx]]+[[2x]+E]][[3[xx]]+[[2x]+num]][[3[xx]]+[[2x]+1]]目标表达式最外层是加法,应用规则 3左边的 E 是乘法 [3[xx]]应用规则 4左边乘法的第一个因子是 3,应用规则 2 num 替换为 3乘法的第二个因子是 [xx]应用规则 4内部乘法的第一个因子是 x,应用规则 1内部乘法的第二个因子是 x,应用规则 1右边的 E 是加法 [[2x]+1]应用规则 3右边加法的第一个加数是 [2x]应用规则 4乘法的第一个因子是 2,应用规则 2 num 替换为 2乘法的第二个因子是 x,应用规则 1右边加法的第二个加数是 1,应用规则 2 num 替换为 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值