是";regex“;在现代编程语言中,真正的;上下文敏感语法;?
多年来,“regex”模式匹配功能越来越强大,以至于我想知道:它真的只是上下文相关的语法匹配吗?它是上下文无关语法匹配的变体/扩展吗?它现在在哪里?我们为什么不把它称为正则表达式而不是旧的、限制性的“正则表达式”?特别是对捕获括号的反向引用使正则表达式比正则、上下文无关或上下文敏感的语法更复杂。这个名字只是历史性地发展起来的(和许多单词一样)。另请参见Wikipedia和Perl中的这篇文章。我的看法:是";regex“;在现代编程语言中,真正的;上下文敏感语法;?,regex,idioms,context-free-grammar,Regex,Idioms,Context Free Grammar,多年来,“regex”模式匹配功能越来越强大,以至于我想知道:它真的只是上下文相关的语法匹配吗?它是上下文无关语法匹配的变体/扩展吗?它现在在哪里?我们为什么不把它称为正则表达式而不是旧的、限制性的“正则表达式”?特别是对捕获括号的反向引用使正则表达式比正则、上下文无关或上下文敏感的语法更复杂。这个名字只是历史性地发展起来的(和许多单词一样)。另请参见Wikipedia和Perl中的这篇文章。我的看法: 正规语文: 由状态机匹配。只能使用一个变量来表示当前值 要匹配的语法中的“位置”:无法实
- 正规语文:
- 由状态机匹配。只能使用一个变量来表示当前值 要匹配的语法中的“位置”:无法实现递归
- 上下文无关语言:
- 由堆叠机匹配。语法中的当前“位置”由一种或另一种形式的堆栈表示。无法“记住”以前发生的任何事情
- 上下文相关语言:
- 大多数编程语言
- 大多数人类语言
在我看来,术语regex主要是指用来表示那些正则语法(星号和问号)的语法 例如:
^(?:0(?)| 1(?)*(?(L)(?!)$
这与L语言不匹配₀₁ = {ε, 01, 0011, 000111, … }. 但是根据.的说法,这种语言是不规则的。你能解释一下
规则语言
和正则表达式
之间的区别吗?它真的比CSG更强大吗?你能举个例子吗?正则语言可以用正则语法来描述(请参阅),而正则表达式是一种模式匹配语言,限制较少,因此处理起来更复杂。谢谢你的评论,我添加了一个指向示例的链接和一些细节。嗯。。。这是否意味着我们可以使用当今的工具来对抗任意CSG。Lookahead/Lookahead和naming肯定会添加一些标准正则表达式之外的东西—内存。那么,我们不是在PDA级别吗?自然语言通常不是上下文敏感的,我知道它超越了经典的正则表达式,但我想知道还有多远。费边上面的链接很有趣。
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$