[英]Is this context-free grammar a regular expression?
我的语法定义如下:
A -> aA*b | empty_string
是A
正则表达式? 我对如何解释BNF语法感到困惑。
不,这个问题实际上与正则表达式无关。 无上下文语法指定了正则表达式无法描述的语言。
这里, A
是非终端; 也就是说,它是必须通过生产规则扩展的符号。 鉴于您只有一个规则,它也是您的起始符号 - 此语法中的任何生成都必须以A
开头。
生产规则是
(1) A -> aA*b |
(2) empty_string
a
和b
是终端符号 - 它们在语言的字母表中,不能扩展。 当你左手边没有更多的非终结者时,你就完成了。
因此,这种语言指定的词语类似于平衡括号,除了a
和b
而不是(
和)
。
例如,您可以按如下方式生成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.