簡體   English   中英

形式語言理論(正則表達式和正則語言)-“或”的概念

[英]Formal language theory (regular expressions and regular languages) - concept of “OR”

好的,因此在對應用於操作數a和b的邏輯OR符號(通常為||)進行編程時,即|| b,表示a或b可以為真,或者兩者都可以為真。 如果只希望一個為真,則使用XOR(有時是^符號)。

但是,在形式語言理論中,“或”(通常是+符號)的概念似乎暗含“異或”(xor)而不是常規“或”。 例如,如果我們用正則表達式aa + bb + ab描述語言L,則來自該語言的有效字符串(單詞)將是其中之一(aa,bb或ab),而不是它們的某些串聯。 為此,必須使用Kleene閉包,例如(aa + bb + ab)*,對嗎?

也許我只是想將+定義為一種特殊的方式,或者可能是操作數不再是布爾值?

如果我似乎理解形式語言/計算建模中的+(OR)含義與編程語言中的含義不同,我只是在尋求驗證。 謝謝!

正式語言OR 包含性(“常規”)的OR。 例如,常規語言ab* + a*b 包括 ab*a*b包含的字符串(即字符串ab )。

問題不在於運算符-正則表達式中的+確實與集合的並集具有相同的含義-問題在於您對操作數的理解。 具體來說,在您的正則表達式aa + bb + ab中,aa並不代表字母上的字符串 ,而是一個次正則表達式。 正則表達式描述字符串 因此正則表達式aa描述了字符串{aa}的集合。 因此,正則表達式aa + bb + ab描述了一組字符串{aa}聯合{bb}聯合{ab} = {aa,bb,ab}。 集合論的異或(對稱差)在正則表達式語法中沒有運算符。 我們可以遞歸定義正則表達式的語言,為正則表達式r寫成L(r),如下所示:

  • L(r)= {r},如果r是字母上的字符串;
  • 如果r = st,則L(r)= L(s)L(t);
  • 如果r = s *,則L(r)= L(s)*;
  • 如果r = s + t,則L(r)= L(s)並集L(t)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM