这一周的学习环环相扣
概览
好多东西都是似曾相识的.要么是在上学期就讲过,要么是中学时期就有过了解.这学期开学一周,所学到的基础知识有这几点:
课程
内容
形式语言与自动机
计算理论 学的,在编译原理 的课上,老师又给大家讲了一遍
布尔代数
真(1 1 1 )与 假(0 0 0 ) .与或非 这些个概念早年在高中时期学集合论 的时候有过了解
进制转换
2,8,10,16等等,都是比较常用的进制了
形式语言与自动机
基本概念
字母表(Alphabet)
定义 :一个有限的非空符号集合,通常用 Σ \Sigma Σ 表示。
例 :Σ = { a , b } \Sigma = \{a, b\} Σ = { a , b } ,Σ = { 0 , 1 } \Sigma = \{0, 1\} Σ = { 0 , 1 }
字符串(String)
定义 :从字母表中的符号构成的有限序列。
例 :在 Σ = { a , b } \Sigma = \{a, b\} Σ = { a , b } 上,a b b a abba abba , b a b bab bab , ε \varepsilon ε (空串)都是字符串。
定义 :在给定字母表上的字符串的集合。
例 :L = { a n b n ∣ n ≥ 0 } L = \{a^nb^n | n \geq 0\} L = { a n b n ∣ n ≥ 0 } ,表示所有由相同数量的a和b组成的字符串。
语法和语言分类
定义 :在推导过程中出现的、可能包含非终结符的字符串。
短语(Phrase)
定义 :在推导过程中可以从某非终结符推导出的句型的一部分。
简单短语(Simple Phrase)
定义 :在一步推导中由单个非终结符直接产生的子串。
句柄(Handle)
定义 :在最右推导的逆过程中,句型中最左边的、能够被归约的产生式右部。
复杂示例 :
考虑文法 G = ( V N , V T , P , S ) G = (V_N, V_T, P, S) G = ( V N , V T , P , S ) ,其中:
V N = { S , A , B } V_N = \{S, A, B\} V N = { S , A , B } :非终结符集合
V T = { a , b , c , d } V_T = \{a, b, c, d\} V T = { a , b , c , d } :终结符集合
P P P :产生式集合,包含以下规则:
S → A B S \rightarrow AB S → A B
A → a A b ∣ a b A \rightarrow aAb | ab A → a A b ∣ ab
B → c B d ∣ c d B \rightarrow cBd | cd B → c B d ∣ c d
S S S :开始符号
对于字符串 w = a a b c c d w = aabccd w = aab cc d :
推导与语法生成树
1. 推导(Derivation)
定义 :从起始符号出发,通过连续应用产生式规则得到字符串的过程。
例 :左推导(最左非终结符优先)、右推导(最右非终结符优先)
2. 语法生成树(Syntax Tree)
定义 :表示推导过程的层次结构,根节点是起始符号,叶节点从左到右构成推导的字符串。
示例 :
对于文法 G = ( V N , V T , P , S ) G = (V_N, V_T, P, S) G = ( V N , V T , P , S ) ,其中:
V N = { S , A , B } V_N = \{S, A, B\} V N = { S , A , B } :非终结符集合
V T = { a , b , c , d } V_T = \{a, b, c, d\} V T = { a , b , c , d } :终结符集合
P P P :产生式集合,包含以下规则:
S → A B S \rightarrow AB S → A B
A → a A b ∣ a b A \rightarrow aAb | ab A → a A b ∣ ab
B → c B d ∣ c d B \rightarrow cBd | cd B → c B d ∣ c d
S S S :开始符号
推导过程:S ⇒ A B ⇒ a A b B ⇒ a a b B ⇒ a a b c B d ⇒ a a b c c d S \Rightarrow AB \Rightarrow aAbB \Rightarrow aabB \Rightarrow aabcBd \Rightarrow aabccd S ⇒ A B ⇒ a A b B ⇒ aab B ⇒ aab c B d ⇒ aab cc d
语法生成树:
句型、短语、简单短语与句柄
定义 :在推导过程中出现的字符串,可能包含终结符和非终结符。
特点 :是从起始符号开始,经过零步或多步推导得到的字符串。
短语(Phrase)
定义 :如果存在推导 S ⇒ ∗ α A β ⇒ ∗ α γ β S \Rightarrow^* \alpha A \beta \Rightarrow^* \alpha \gamma \beta S ⇒ ∗ α A β ⇒ ∗ α γ β ,那么 γ \gamma γ 是相对于非终结符 A A A 的一个短语。
特点 :是句型中可以追溯到某个非终结符的子串。
简单短语(Simple Phrase)
定义 :如果 A → γ A \rightarrow \gamma A → γ 是一个产生式,且存在推导 S ⇒ ∗ α A β ⇒ α γ β S \Rightarrow^* \alpha A \beta \Rightarrow \alpha \gamma \beta S ⇒ ∗ α A β ⇒ α γ β ,那么 γ \gamma γ 是一个简单短语。
特点 :是在一步推导中直接由一个非终结符产生的子串。
句柄(Handle)
定义 :在最右推导的逆过程中,可以被归约的最左边的产生式右部。
特点 :是规范归约过程中第一个被识别和归约的部分。
示例分析
对于上述文法和字符串 w = a a b c c d w = aabccd w = aab cc d 的推导:
句型 :S S S , A B AB A B , a A b B aAbB a A b B , a a b B aabB aab B , a a b c B d aabcBd aab c B d , a a b c c d aabccd aab cc d 都是句型。
短语 :在句型 a a b c B d aabcBd aab c B d 中,a a b aab aab 是从 A A A 推导出的短语,c B d cBd c B d 是从 B B B 推导出的短语。
简单短语 :在 a A b B aAbB a A b B 中应用 A → a b A \rightarrow ab A → ab 产生 a a b B aabB aab B 时,a b ab ab 是一个简单短语。
句柄 :在句型 a a b c c d aabccd aab cc d 的规范归约中,第一个句柄是 c d cd c d (对应产生式 B → c d B \rightarrow cd B → c d )。
布尔代数
值:真与假,这个很好理解
与或非,这三个就不说了,太简单了,写一些别的
1. 异或(XOR)
符号 :⊕(LaTeX:\oplus)或 ^(编程语言中常用)
逻辑定义 :
当且仅当两个输入不同 时,结果为真。
真值表 :
A
B
A⊕B
0
0
0
0
1
1
1
0
1
1
1
0
2. 同或(XNOR)
符号 :⊙(LaTeX:\odot)或 ≡(LaTeX:\equiv)
逻辑定义 :
当且仅当两个输入相同 时,结果为真(异或的非)。
真值表 :
A
B
A⊙B
0
0
1
0
1
0
1
0
0
1
1
1
3. 与非(NAND)
符号 :↑(LaTeX:\uparrow)或 ¬(A ∧ B)
逻辑定义 :
先进行与运算,再取反。
真值表 :
A
B
A↑B
0
0
1
0
1
1
1
0
1
1
1
0
4. 或非(NOR)
进制转换详解
以下是常见进制的表达:
进制
英文
范围
前缀
后缀
二进制
Binary
0-1
0B
B
八进制
Octal
0-7
0O
O
十进制
Decimal
0-9
无
D
十六进制
Hexadecimal
0-9,A-F
0x
H
例如17O 表达的是八进制下的数字,(也就是15D或者是15(因为十进制很常见,忽略后缀D的话默认是十进制) )
N N N 进制转换到十进制
将任意进制数转换为十进制的通用方法是:按权展开相加法
操作步骤
确定进制 :明确当前进制数的基数N(如二进制N=2,十六进制N=16)
分解位权 :从右到左为每一位数字标注位权(从0开始递增)
按权相乘 :每一位数字乘以N的位权次方
求和 :将所有乘积相加得到十进制结果
示例说明
二进制转十进制
二进制数:1011.1011B
计算过程:
1011.1011 B = 1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 + 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 + 1 × 2 − 4 = 11.6875 1011.1011B = 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 + 1 \times 2^{'{'}-1{'}'} + 0 \times 2^{'{'}-2{'}'} + 1 \times 2^{'{'}-3{'}'} + 1 \times 2^{'{'}-4{'}'} = 11.6875 1011.1011 B = 1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 + 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 + 1 × 2 − 4 = 11.6875
通解
T T T 代表进制符号
T 进制数 : a b c d . e f g h T T进制数:abcd.efghT T 进制数 : ab c d . e f g h T
a b c d . e f g h T = a × T 3 + b × T 2 + c × T + d × T 0 + e × T − 1 + f × T − 2 + g × T − 3 + h × T − 4 abcd.efghT= a\times T^3+b\times T^2 + c\times T + d\times T^0 +e\times T^{-1} + f\times T^{-2} +g\times T^{-3} + h\times T^{-4} ab c d . e f g h T = a × T 3 + b × T 2 + c × T + d × T 0 + e × T − 1 + f × T − 2 + g × T − 3 + h × T − 4
更进一步地
对任意T 进制数 a ∗ n a ∗ n − 1 a ∗ n − 2 . . . a 0 . a ∗ − 1 a ∗ − 2 a ∗ − 3 . . . a _ − m T ∣ m , n ∈ N T进制数a*na*{n-1}a*{n-2}...a_0.a*{-1}a*{-2}a*{-3}...a\_{-m}T |{m,n}\in N T 进制数 a ∗ na ∗ n − 1 a ∗ n − 2 ... a 0 . a ∗ − 1 a ∗ − 2 a ∗ − 3 ... a _ − m T ∣ m , n ∈ N
转到十进位制为 S = ∑ _ i = − m n a i × T i S = \sum\limits\_{i=-m}^n a_i\times T^i S = ∑ _ i = − m n a i × T i
十进制转N N N 进制
操作步骤
整数部分 :除N取余法
用N除十进制数,记录余数
用商继续除以N,直到商为0
从下往上读取所有余数,得到N进制的整数部分
小数部分 :乘N取整法
小数部分乘以N,取整数部分作为N进制的一位
取小数部分继续乘以N,重复直到小数部分为0或达到所需精度
示例说明
十进制转二进制
整数部分:将25转为二进制
25 = 2 × 12 + 1 12 = 2 × 6 + 0 6 = 2 × 3 + 0 3 = 2 × 1 + 1 1 = 2 × 0 + 1 \begin{'{'}align{'}'}
25 &= 2 \times 12 + \textcolor{'{'}red{'}'}{'{'}1{'}'} \
12 &= 2 \times 6 + \textcolor{'{'}red{'}'}{'{'}0{'}'} \
6 &= 2 \times 3 + \textcolor{'{'}red{'}'}{'{'}0{'}'} \
3 &= 2 \times 1 + \textcolor{'{'}red{'}'}{'{'}1{'}'} \
1 &= 2 \times 0 + \textcolor{'{'}red{'}'}{'{'}1{'}'}
\end{'{'}align{'}'} 25 12 6 3 1 = 2 × 12 + 1 = 2 × 6 + 0 = 2 × 3 + 0 = 2 × 1 + 1 = 2 × 0 + 1
从下往上读:11001B
小数部分:将0.625转为二进制
0.625 × 2 = 1.25 → 1 0.25 × 2 = 0.5 → 0 0.5 × 2 = 1.0 → 1 \begin{'{'}align{'}'}
0.625 \times 2 &= 1.25 \rightarrow \textcolor{'{'}red{'}'}{'{'}1{'}'} \
0.25 \times 2 &= 0.5 \rightarrow \textcolor{'{'}red{'}'}{'{'}0{'}'} \
0.5 \times 2 &= 1.0 \rightarrow \textcolor{'{'}red{'}'}{'{'}1{'}'}
\end{'{'}align{'}'} 0.625 × 2 0.25 × 2 0.5 × 2 = 1.25 → 1 = 0.5 → 0 = 1.0 → 1
从上往下读:.101B
结果:25.625 D = 11001.101 B 25.625_D = 11001.101_B 25.62 5 D = 11001.10 1 B
二进制转八进制、十六进制
操作步骤
将二进制数从小数点处分开,分别处理整数部分和小数部分
八进制转换 :每3位二进制对应1位八进制
十六进制转换 :每4位二进制对应1位十六进制
如果位数不足,整数部分左侧补0,小数部分右侧补0
示例说明
二进制转八进制
二进制: 1011010.101 B 分组: 001 ∣ 011 ∣ 010.101 ∣ 000 八进制: 1 3 2.5 0 结果: 132.50 O \begin{'{'}array{'}'}{'{'}rcl{'}'}
\text{'{'}二进制:{'}'} & 1011010.101_B \
\text{'{'}分组:{'}'} & 001|011|010.101|000 \
\text{'{'}八进制:{'}'} & 1\quad3\quad2.5\quad0 \
\text{'{'}结果:{'}'} & 132.50_O
\end{'{'}array{'}'} 二进制: 分组: 八进制: 结果: 1011010.10 1 B 001∣011∣010.101∣000 1 3 2.5 0 132.5 0 O
二进制转十六进制
二进制: 1011010.101 B 分组: 0101 ∣ 1010.1010 十六进制: 5 A . A 结果: 5 A . A H \begin{'{'}array{'}'}{'{'}rcl{'}'}
\text{'{'}二进制:{'}'} & 1011010.101_B \
\text{'{'}分组:{'}'} & 0101|1010.1010 \
\text{'{'}十六进制:{'}'} & 5\quad A.A \
\text{'{'}结果:{'}'} & 5A.A_H
\end{'{'}array{'}'} 二进制: 分组: 十六进制: 结果: 1011010.10 1 B 0101∣1010.1010 5 A . A 5 A . A H
八进制、十六进制转二进制
操作步骤
将八进制/十六进制数从小数点处分开
八进制转换 :每1位八进制对应3位二进制
十六进制转换 :每1位十六进制对应4位二进制
示例说明
八进制转二进制
八进制: 76.24 O 转换: 7 → 111 6 → 110 . → . 2 → 010 4 → 100 结果: 111110.010100 B \begin{'{'}array{'}'}{'{'}rcl{'}'}
\text{'{'}八进制:{'}'} & 76.24_O \
\text{'{'}转换:{'}'} & 7 \rightarrow 111 \
& 6 \rightarrow 110 \
& . \rightarrow . \
& 2 \rightarrow 010 \
& 4 \rightarrow 100 \
\text{'{'}结果:{'}'} & 111110.010100_B
\end{'{'}array{'}'} 八进制: 转换: 结果: 76.2 4 O 7 → 111 6 → 110 . → . 2 → 010 4 → 100 111110.01010 0 B
十六进制转二进制
十六进制: 3 A . C 8 H 转换: 3 → 0011 A → 1010 . → . C → 1100 8 → 1000 结果: 0011 1010.1100 1000 B \begin{'{'}array{'}'}{'{'}rcl{'}'}
\text{'{'}十六进制:{'}'} & 3A.C8_H \
\text{'{'}转换:{'}'} & 3 \rightarrow 0011 \
& A \rightarrow 1010 \
& . \rightarrow . \
& C \rightarrow 1100 \
& 8 \rightarrow 1000 \
\text{'{'}结果:{'}'} & 0011,1010.1100,1000_B
\end{'{'}array{'}'} 十六进制: 转换: 结果: 3 A . C 8 H 3 → 0011 A → 1010 . → . C → 1100 8 → 1000 0011 1010.1100 100 0 B
留言评论