я имею в виду что-то вродеСуществуют ли какие-либо изменения в 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
Есть ли наука работы, описывающие что-то подобное этому? Можем ли мы описать наши грамматики таким образом и все еще иметь возможность анализировать его в приемлемое время?
Конечно, вы * можете * сделать это. Один простой способ - обработать ваши параметризованные правила BNF как макросы и просто расширить их до обычных BNF. Вопрос в том, должен ли вы это делать? Получает ли дополнительная экспрессивность вас на практике? Я построил много грамматик; Я так не думаю. YMMV. –