上下文免费语法BNF

时间:2015-06-22 00:22:49

标签: grammar context-free-grammar bnf ebnf ambiguous-grammar

需要有关非扩展BNF语法的帮助:

Σ = {a,b,c}

L = {ω ɛ Σ^* | such that all a's (if any) comes before all c's(if any)}

例如,字符串aba,cbc和abacbc在语言中,但字符串abcabc不是。

这是我到目前为止(它是否正确?如果我错了请纠正我):

S-> asbsc | bsasc | ascsb |ɛ

2 个答案:

答案 0 :(得分:0)

a'sc's的数量是否必须相同?如果不是,那么你会错过那些不同的情况,例如:aac。我认为这样的事情应该有效:

S -> AC
A -> aA | bA | ε
C -> bC | cC | ε

A生成用于派生非c的字符序列,C生成用于派生不是{{1}的字符序列}}。

答案 1 :(得分:0)

你的评论说你想要相同数量的a和c,所以从简单的语法开始:

initialViewController

并在这些之前/之后/之间添加任意数量的b:

S -> aSc | ε

请注意,上述内容并不含糊(甚至是LR(1))。

如果您想允许不同数量的a和c,您可以使用相同的方法来避免歧义。从a和c开始:

S -> BaScB | B
B -> Bb | ε

并在开头和后面加上b的字符:

S -> AC
A -> Aa | ε
C -> Cc | ε