2015-03-04 2 views
2

Я использую Grako EBNF/PEG parser.Как реализовать комбинацию правил без повторений в грамматике ebnf?

Я знаю, что синтаксис EBNF позволяет захватывать выражения, которые удовлетворяют одному из предложенных вариантов:

(a | b | c) 

Есть ли подобная часть синтаксиса или обходной путь, который позволяет захватывать expessions, которые являются любыми комбинациями a, b и c без повторений, так что допустимые выражения было бы как:

a b c 
b a c 
a b 
b c 
b 
none 

но не нравится:

b b c 
a a 

?

ответ

2

Один из способов - указать комбинации в правиле.

Другой способ - использовать семантическое действие, которое проверяет повторения и вызывает grako.exceptions.FailedSemantics, если оно их находит. Поведение парсера будет таким же, как если бы вход не анализировался.

+1

Спасибо за идею использования семантических действий. И как мне реализовать комбинации 'с' повторений? –

+0

Вы можете использовать '' '{a | b | c} + '' '(вы будете продвигать/принимать ответ?). – Apalala

Смежные вопросы