繁体   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