这是语法,它应该用逗号作为分隔符来描述嵌套大括号的语言:
L ::= {L} | L,L |
我希望语法接受和拒绝的一些字符串示例:
接受:
{,{,,{,}},,{,}}
{{{{}}}}
{,{}}
拒绝:
{}{}
{,{}{}}
{{},{}
答案 0 :(得分:4)
手工完成:
L :: = {
L }
| {
L }
,
| ,
L | ε
或者,我们可以使用更系统化的方法,而不是仅仅使用它,而是在removing immediate left recursion上应用维基百科的算法:
L :: = {
L }
L 1 | →<子> 1 子>
L 1 :: =ε| ,
L L 1
答案 1 :(得分:0)
首先,该语法不会接受你的第一个例子,因为它要求逗号位于close括号之后和open括号之前。我建议将其重新编写为
L::= {L} | ,L
这不会消除左递归,但它至少会与你接受的答案相匹配。