2016-03-24 3 views
1

я имею в виду что-то вродеСуществуют ли какие-либо изменения в BNF с параметрами

LISTOF(EL) := "[" EL ("," EL)* "]" 
LISTNUM := LISTOF(NUMBER) 
LISTID := LISTOF(IDENT) 

так, с определениями

NUMBER := ('0'-'9')* 
IDENT := ('a'-'z'|'A'-'Z')* 

мы имеем следующие

[435,657,44] является примером LISTNUM,

[dsf,thg,ewre] - пример LISTID.

Или другой пример (е означает пустую строку)

A(0) := e 
A(n) := "a" A(n-1) | e 

так, A (5) есть множество всех строк состоят из «а» с длиной не более 5

Есть ли наука работы, описывающие что-то подобное этому? Можем ли мы описать наши грамматики таким образом и все еще иметь возможность анализировать его в приемлемое время?

+1

Конечно, вы * можете * сделать это. Один простой способ - обработать ваши параметризованные правила BNF как макросы и просто расширить их до обычных BNF. Вопрос в том, должен ли вы это делать? Получает ли дополнительная экспрессивность вас на практике? Я построил много грамматик; Я так не думаю. YMMV. –

ответ

0

Обычно используемые мета синтаксисы, такие как Bnf, Abnf и Ebnf, не имеют параметризованных правил. Однако Iso Ebnf является расширяемым в соответствии со стандартом. Если я правильно помню, стандарт фактически показывает пример введения параметров.

Вы можете получить стандартный here бесплатно.

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

  • Нет связанных вопросов^_^