[英]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),如下所示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.