2013-10-28 23 views
3

我目前正在學習編譯器,並在理解常規集時遇到一些問題。例如,假設我有一組二進制字符串(0,1)。所有那些均勻和正數的整數都被認爲是正則集合的一部分嗎?假設我有同樣的組合,但是它們不是偶數,它們可以被5整除,它仍然是一個常規集合嗎?以下設置是否正常?

我一直在尋找this helpful guide I found online,但我仍然對什麼可以定義爲常規集感到困惑。

+1

我知道如何編寫正則表達式,但我不知道你在說什麼。你也許應該看看[CS.SE](http://cs.stackexchange.com)並在那裏問它。 – HamZa

+0

是的,它是一個正規的,語言如何?如果你用一個數字「5」來劃分一個數字,那麼剩下的可以是0,1,2,3,4(就像你在DFA中需要五個數據一樣)。向一個數字添加一個數字總是隻移動到5個階段中的一個(沒有其他的可能的舉動)。因此,任何時間你只需要記憶有限的信息來處理語言的字符串。因此,它是一種正規語言。 –

回答

2

所有的均勻和正數整數都被認爲是正則集的一部分嗎?

是的!你可以用這個正則表達式生成它們:

2 | 4 | 6 | 8 | (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)+(0 | 2 | 4 | 6 | 8)

假設我有同樣的組合, ,它們可以被5整除,它仍然是一個常規集合嗎?

是的!這是正則表達式:

5 | (0 | 5 | 5 | 6 | 7 | 8 | 9)+(0 | 5)

更一般地,要確定一個集合是否爲常規集合,找到一個有限自動機,它能精確接受語言中的字符串或該集合的正則表達式。如果你能做到這一點,語言是經常性的。如果沒有,這是不正常的。

希望這會有所幫助!

+0

你爲什麼不使用字符類? '| 0-9] + [02468]'可以簡化爲'[0-9] * [02468]'。 '[05] | [0-9] + [05]' - >'[0-9] * [05]'。在附註中,不要忘記0可以被2和5整除:) – HamZa

+1

@ Hamza-由於問題是關於數學正則表達式而不是軟件正則表達式,因此我不想使用特定於工具的語法。 (檢查OP的鏈接)。另外,這個問題具體談到* 2和5的正*倍數,所以我故意排除0. – templatetypedef

+0

有道理,謝謝 – HamZa

相關問題