BNF для создания векторов одинаковой длины - PullRequest
1 голос
/ 11 октября 2011

Можно ли описать в БНФ пару векторов одинаковой длины? Например, я хотел бы использовать такую ​​грамматику для захвата действительных операций с точечным произведением, поскольку для такой операции требуются векторы одинаковой длины.

Я могу описать один вектор (я думаю, это нормально): [1,2,3]

<vector> ::= "[" <vectorItems> "]"
<vectorItems> ::= <wholeNumber>|<wholeNumber>","<vectorItems>

Но как я могу описать следующее (то есть векторы могут быть любой длины, но длины двух векторов одинаковы; возможно ли это? Я в этом немного новичок) ?: [1, 2,3,4], [5,6,7,8]

1 Ответ

2 голосов
/ 11 октября 2011

Как-то так?

  S := [T]
  T := N,T,N | N],[N
  N := (any valid number)

  Nonterminals: S, T, N
  Terminals: [ ] , # (anything required by your definition of N)

Строки на этом языке в порядке от наименьшего к наибольшему, где N обозначает произвольное число:

L = {[N], [N] , [N, N], [N, N] , [N, N, N], [N, N, N] , ...}

= {aBcDe |a = [ и c = ], [ и e = ] и B = ( N, ) ^ k N и D = ( N, ) ^ k N и k> 0)

(обозначения клемм выделены жирным шрифтом)

...