2015-06-22 106 views
0

需要使用非扩展BNF语法帮助:上下文无关文法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 |ɛ

回答

0

您的评论说,你想和c的数量相等,所以开始用简单的语法,做的是:

S -> aSc | ε 

,并在任何数量的B的前加/后/之间的那些

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

请注意,以上不含糊(甚至LR(1))。

如果您想允许不同数量的a和c,您可以使用相同的方法来避免模糊性。开始只用A和C'S:

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

和B的开始处添加和对方字符后:

S -> BAC 
A -> AaB | ε 
C -> CcB | ε 
B -> Bb | ε 
0

做的a'sc's数需要一致吗?如果不是那么你错过了那些不同的情况,例如:aac。我觉得这样的事情应该工作:

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

A生产用于导出不属于字符序列的cC生产用于导出那些不属于a的字符序列。

+0

是一个公司和c的需要是相同的数 –