根據使用者給定的語言構建正則表示式。
正則表示式是一種用於描述語言並被有限自動機接受的語言。正則表示式是表示任何語言的最有效方法。設 Σ 為表示輸入集的字母表。
Σ 上的正則表示式可以定義如下:
- Φ 是一個正則表示式,表示空集。
- ε 是一個正則表示式,表示集合 { ε},稱為空字串。
- 對於 Σ 中的每個 ‘a’,‘a’ 是一個正則表示式,表示集合 {a}。
- 如果 r 和 s 是表示語言的正則表示式。
- 分別為 L1 和 L2,則:
- r+s 等價於 L1 U L2(並集)
- rs 等價於 L1L2(連線)
- r* 等價於 L1*(閉包)
r* 被稱為 Kleen 閉包或閉包,表示 r 出現無限次。
問題 1
編寫接受集合 l: = {a} 中所有 a 的組合的語言的正則表示式。
解答
所有 a 的組合意味著 a 可以出現零次、一次、兩次等等。如果 a 出現零次,則表示空字串。也就是說,我們期望集合 {E, a, aa, aaa, ....}。因此,我們為其給出如下正則表示式:
R = a*
即 a 的 Kleen 閉包。
問題 2
編寫接受集合 l: = {a} 中所有 a 的組合(除了空字串)的語言的正則表示式。
解答
需要為語言 L = {a, aa,aaa, ....} 構建正則表示式。
此集合表示沒有空字串。因此,我們可以將正則表示式表示為:
R = a+
問題 3
編寫集合 l: = {0, 1} 上的語言 L 的正則表示式,使得所有字串都不包含子字串 01。
解答
語言如下:
L = {E, 0, 1,00, 11,10,100,.....}
上述語言的正則表示式如下:
R = (1* 0*)
問題 4
編寫包含每個 0 後緊跟 11 的字串的語言的正則表示式。
解答
正則表示式將是:R = (011+ 1)*
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP