Skip to main content

编译原理

字母运算

Σ={cii>0ci=1ciε}(字母表)s="c1cn",cΣs1(字符串)ε(空串)\begin{matrix*}[l] \Sigma=\{ c_i \mid i>0 \land |c_i|=1 \land c_i \not = \varepsilon \} & \text{(字母表)} \\ s="c_1 \cdots c_n" , c \in \Sigma \land |s| \ge 1 & \text{(字符串)} \\ \varepsilon & \text{(空串)} \\ \end{matrix*}

sjsk="sjsk"(字符串连接)sn=snsn1(字符串方幂)s0=ε\begin{matrix*}[l] s_j \cdot s_k = "s_js_k" & \text{(字符串连接)} \\ s^n=s^n \cdot s^{n-1} & \text{(字符串方幂)} \\ s^0=\varepsilon \\ \end{matrix*}


SjSk={sisiSjsiSk}(合并字符串集)SjSk={sjsksjSjskSk}(连接字符串集)Sn=SnSn1(符串集方幂)S0={ε}\begin{matrix*}[l] S_j \cup S_k = \{s_i|s_i \in S_j \lor s_i \in S_k\} & \text{(合并字符串集)} \\ S_j \cdot S_k = \{s_js_k|s_j \in S_j \land s_k \in S_k\} & \text{(连接字符串集)} \\ S^n = S^n \cdot S^{n-1} & \text{(符串集方幂)} \\ S^0 = \{\varepsilon\} \\ \end{matrix*}


S=i0Si(克林闭包)S+=i=1Si(正闭包)\begin{matrix*}[l] S^* = \displaystyle \bigcup^{\infty}_{i \ge 0} S^i & \text{(克林闭包)} \\ \\ S^+ = \displaystyle \bigcup^{\infty}_{i=1} S^i & \text{(正闭包)} \\ \end{matrix*}

文法

G=(VN,VT,P,S)(文法)V=VNVT(词汇表)VN(非终结符集)VT(终结符集)P(产生式的有限集S,SVN(开始符号)\begin{matrix*}[l] G=(V_N,V_T,P,S) & \text{(文法)} \\ V=V_N \cup V_T & \text{(词汇表)} \\ V_N & \text{(非终结符集)} \\ V_T & \text{(终结符集)} \\ P & \text{(产生式的有限集} \\ S , S \in V_N & \text{(开始符号)} \\ \end{matrix*}

αβ(产生式)αV+(产生式左部)βV(产生式右部)\begin{matrix*}[l] \alpha \to \beta & \text{(产生式)} \\ \alpha \in V^+ & \text{(产生式左部)} \\ \beta \in V^* & \text{(产生式右部)} \\ \end{matrix*}

(产生式左部至少含有一个非终结符)αa={aiaiVN}αa1\text{(产生式左部至少含有一个非终结符)} \\ \forall \alpha \\ \exists a=\{a_i \mid a_i \in V_N\} \subseteq \alpha \land |a| \ge 1


(候选式)αβj,αβ,αβk    αβiβk ⁣:βi(jik)α的候选式\text{(候选式)} \\ \exists \alpha \to \beta_j , \alpha \to \beta_{\cdots},\alpha \to \beta_k \\ \iff \alpha \to \beta_i \mid \cdots \mid \beta_k \\ \colon \beta_i (j \le i \le k) \text{是} \alpha \text{的候选式}