是";regex“;在现代编程语言中,真正的;上下文敏感语法;?

是";regex“;在现代编程语言中,真正的;上下文敏感语法;?,regex,idioms,context-free-grammar,Regex,Idioms,Context Free Grammar,多年来,“regex”模式匹配功能越来越强大,以至于我想知道:它真的只是上下文相关的语法匹配吗?它是上下文无关语法匹配的变体/扩展吗?它现在在哪里?我们为什么不把它称为正则表达式而不是旧的、限制性的“正则表达式”?特别是对捕获括号的反向引用使正则表达式比正则、上下文无关或上下文敏感的语法更复杂。这个名字只是历史性地发展起来的(和许多单词一样)。另请参见Wikipedia和Perl中的这篇文章。我的看法: 正规语文: 由状态机匹配。只能使用一个变量来表示当前值 要匹配的语法中的“位置”:无法实

多年来,“regex”模式匹配功能越来越强大,以至于我想知道:它真的只是上下文相关的语法匹配吗?它是上下文无关语法匹配的变体/扩展吗?它现在在哪里?我们为什么不把它称为正则表达式而不是旧的、限制性的“正则表达式”?

特别是对捕获括号的反向引用使正则表达式比正则、上下文无关或上下文敏感的语法更复杂。这个名字只是历史性地发展起来的(和许多单词一样)。另请参见Wikipedia和Perl中的这篇文章。

我的看法:

  • 正规语文:
    • 由状态机匹配。只能使用一个变量来表示当前值 要匹配的语法中的“位置”:无法实现递归
  • 上下文无关语言:
    • 由堆叠机匹配。语法中的当前“位置”由一种或另一种形式的堆栈表示。无法“记住”以前发生的任何事情
  • 上下文相关语言:
    • 大多数编程语言
    • 大多数人类语言
我确实知道正则表达式解析器,它允许您匹配解析器已经遇到的内容,实现上下文敏感语法之类的功能

尽管如此,正则表达式解析器无论多么复杂,都不允许规则的递归应用,这是上下文无关语法的明确要求


在我看来,术语regex主要是指用来表示那些正则语法(星号和问号)的语法

例如:

^(?:0(?)| 1(?)*(?(L)(?!)$

这与L语言不匹配₀₁ = {ε, 01, 0011, 000111, … }. 但是根据.

的说法,这种语言是不规则的。你能解释一下
规则语言
正则表达式
之间的区别吗?它真的比CSG更强大吗?你能举个例子吗?正则语言可以用正则语法来描述(请参阅),而正则表达式是一种模式匹配语言,限制较少,因此处理起来更复杂。谢谢你的评论,我添加了一个指向示例的链接和一些细节。嗯。。。这是否意味着我们可以使用当今的工具来对抗任意CSG。Lookahead/Lookahead和naming肯定会添加一些标准正则表达式之外的东西—内存。那么,我们不是在PDA级别吗?自然语言通常不是上下文敏感的,我知道它超越了经典的正则表达式,但我想知道还有多远。费边上面的链接很有趣。
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$