开发者

Is this grammar SLR?

开发者 https://www.devze.com 2022-12-28 02:36 出处:网络
E -> A | B A -> a | c B -> b | c My answer is no because it has a reduce/reduce conflict, can anyone else verify this?

E -> A | B

A -> a | c

B -> b | c

My answer is no because it has a reduce/reduce conflict, can anyone else verify this?

Also I gained my answer through constructing the transition diagram, is there a simpler way of finding this out?

Thanks for the help!

P.S Would a Recursive Des开发者_如何学编程cent be able to parse this?


You're right -- starting from a 'c' in the input there's no way to decide whether to treat that as an 'A' or a 'B'. I doubt there's anything that can really parse this properly -- it's simply ambiguous. Using a different type of parser won't help; you really need to change the language.

There are some formal methods for detecting such ambiguities, but I can hardly imagine bother with them for a grammar this small. One easy way to spot this particular problem is to mentally arrange it into a tree:

Is this grammar SLR?

The two lines coming up out of the 'c' box represent the reduce/reduce conflict. There's no reason to prefer one route from 'c' to 'E' over the other, so the grammar is ambiguous.

0

精彩评论

暂无评论...
验证码 换一张
取 消