Как я могу изменить EBNF (bar | baz)*, чтобы обеспечить разделение между двумя барами?

У меня есть следующий EBNF, заявив, что foo состоит из любого числа чередующихся barс и bazs:

foo : (bar | baz)*

Как я могу изменить это, чтобы принудительно использовать разделитель между двумя последовательными bars? Например, если foo мог содержать не более двух элементов, я мог бы использовать:

foo : <empty> | bar | baz | bar SEP bar | bar baz | baz bar | baz baz

В качестве альтернативы, что если в конце концов необходимы разделителиbarэто до конца? То есть эквивалентно:

foo : <empty> | bar | baz | bar SEP bar | bar SEP baz | baz bar | baz baz

0 ответов

Другие вопросы по тегам