Я столкнулся с неоднозначным случаем, когда входная строка могла быть проанализирована с использованием разных правил, мне нужно рассмотреть оба варианта и сгенерировать для них несколько деревьев синтаксического анализа.
Для простоты, учитывая имя человека, такое как «Альбер Йохансон», это имя можно было бы проанализировать как
(fullName (firstName Alber) (lastName Johanson))
или анализируется как
(fullName (firstName Alber) (lastName Johan) (relation son))
Во-первых, как настроить правила для второго случая? Поскольку это часть второй строки, а не отдельный токен.
Во-вторых, как сгенерировать деревья синтаксического анализа для всех возможных вариантов входной строки?
ОБНОВЛЕНИЕ
Это образец грамматики, который у меня есть, его можно использовать только для анализа первого случая, но не второго.
fullName: firstName lastName | firstName lastName relation;
firstName: NAME;
lastName: NAME;
relation: REL;
NAME: ('a'..'z'|'A'..'Z')+;
REL: 'son';
WHITESPACE : ('\t' | ' ' | '\r' | '\n'| '\u0020' | '\u000C' )+ -> skip ;