需要有关非扩展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 :(得分:0)
a's
和c'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 | ε