Следующая контекстно-свободная грамматика представляет неоднозначность типа «висящее другое» (представьте, что обозначает, а обозначает, а обозначает какой-то другой вид инструкции или блока):
Например, может быть проанализирован как или как (это самое простое / самое короткое неоднозначное слово для этой грамматики).б с Sif expr then
else
aacbc(a(acbc))(a(ac)bc)
«Стандартный» способ разрешить эту «неопределенную неопределенность» заставляет оператор «else» ( ) соединяться с ближайшим / внутренним «if-then» ( ). Это можно сделать следующим образом: Эта грамматика однозначна. В приведенном выше примере он анализ .а с (a(acbc))
Вопрос: Есть ли другой естественный способ устранить неоднозначность, которая заставила бы анализировать ? Другими словами, я ищу грамматику, которая генерирует тот же язык, что и два выше, однозначно, и который анализирует как .a a c b c a a c b c ( a ( a c ) b c )
Замечание: Моя первая попытка была следующей: который разрешает неоднозначность мере необходимости - но эта грамматика все еще неоднозначна: может быть проанализирован как или как . aacbcaacbacbc(a(ac)b(acbc))(a(acb(ac))bc)