繁体   English   中英

这种无上下文的语法是正则表达式吗?

[英]Is this context-free grammar a regular expression?

我的语法定义如下:

A -> aA*b | empty_string

A正则表达式? 我对如何解释BNF语法感到困惑。

不,这个问题实际上与正则表达式无关。 无上下文语法指定了正则表达式无法描述的语言。

这里, A是非终端; 也就是说,它是必须通过生产规则扩展的符号。 鉴于您只有一个规则,它也是您的起始符号 - 此语法中的任何生成都必须以A开头。

生产规则是

(1)    A -> aA*b | 
(2)         empty_string

ab是终端符号 - 它们在语言的字母表中,不能扩展。 当你左手边没有更多的非终结者时,你就完成了。

因此,这种语言指定的词语类似于平衡括号,除了ab而不是()

例如,您可以按如下方式生成ab

A -> aA*b (using 1)
aAb -> ab (using 2)

同样,你可以生成aabb

A -> aA*b (1)
aAb -> aaA*bb (1)
aaAbb -> aabb (2)

甚至是aababb

A -> aA*b
aA*b -> aabA*b:
aaba*b -> aababA*b:
aababA*b: -> aababb

得到它? 明星符号可能有点令人困惑,因为你已经在正则表达式中看到它,但实际上它在那里做同样的事情。 它被称为Kleene-closure,它代表你可以使用0或更多A s所做的所有单词。

正则表达式生成常规语言,可以使用状态机进行解析。

BNF语法是Context Free Grammars,它可以生成无上下文语言,可以使用Push Down Automata(堆栈机器)进行解析

上下文免费语法可以做普通语法可以做的一切。

A似乎是BNF语法规则。 我不确定你为什么把它与正则表达式混淆了。 你有困惑因为它里面有*吗? 所有带*的东西都不是正则表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM