Если вы можете нарисовать две деревья синтаксического разбора (или, что то же самое, написать два левых деривации) для того же предложения, то грамматика неоднозначна. Для этого не существует общего алгоритма (двусмысленность - неразрешимая проблема), но для многих грамматик это не сложно.
Достаточно примера @rici.
If true then s1; s2
Одно дерево синтаксического анализа является
<Program>
/ | \
<Program> ; <Stmt>
| |
<Stmt> s2
/|\__________
/| \ \
If <Bool> then <Program>
| |
true <Stmt>
|
s1
Я дам вам работать другой.
Вы можете предоставить два разных вывода того же предложения. –
Найдя два возможных анализа для некоторого предложения. Попробуйте следующее: 'Если true, то s1; s2' – rici
Этот вопрос уже задан и дан ответ: http://stackoverflow.com/questions/4788148/what-is-the-easiest-way-of-telling-whether-a-bnf-grammar-is-domiguous- или-нет? RQ = 1 –