好的,因此在将逻辑或符号(通常为||)应用于操作数a和b时,即|| b,表示a或b可以为真,或者两者都可以为真。如果只希望一个为真,请使用XOR(有时是^符号)。
但是,在形式语言理论中,“或”(通常为+符号)的概念似乎暗含“异或”(xor)而不是常规“或”。例如,如果我们用正则表达式aa + bb + ab描述语言L,则来自该语言的有效字符串(单词)将是其中之一(aa,bb或ab),而不是它们的某些串联。为此,您必须使用Kleene闭包,例如(aa + bb + ab)*,对吗?
也许我只是想将+定义为一种特殊的方式,或者可能是操作数不再是布尔值?
如果我似乎正在理解+(OR)在形式语言/计算模型中的含义与在编程语言中的含义似乎有所不同,我只是在寻求验证。谢谢!
答案 0 :(得分:0)
正式语言OR 是包含性(“常规”)的OR。例如,常规语言ab* + a*b
包括 ab*
和a*b
中的字符串(即字符串ab
)。
答案 1 :(得分:0)
问题不在于运算符-正则表达式中的+确实与集的并集具有相同的含义-问题在于您对操作数的理解。具体来说,在您的正则表达式aa + bb + ab中,aa并不代表字母上的 string ,而是一个次正则表达式。正则表达式描述字符串的 sets ;因此正则表达式aa描述了字符串{aa}的集合。因此,正则表达式aa + bb + ab描述了一组字符串{aa}联合{bb}联合{ab} = {aa,bb,ab}。集合论的异或(对称差)在正则表达式语法中没有运算符。我们可以递归定义正则表达式的语言,为正则表达式r写成L(r),如下所示: