Grammar BNF创建具有相同长度的向量

Grammar BNF创建具有相同长度的向量,grammar,bnf,Grammar,Bnf,可以用BNF描述一对长度相同的向量吗?例如,我想使用这样的语法来捕获有效的点积运算,因为这样的运算需要相同长度的向量 我可以描述一个向量(我认为这是可以的):[1,2,3] :=“[”“]” ::= |"," 但我如何描述以下内容(也就是说,向量可以是任意长度的,但两个向量的长度是相同的;这可能吗?我在这方面是新手):[1,2,3,4],[5,6,7,8]类似的东西 S := [T] T := N,T,N | N],[N N := (any valid number) Non

可以用BNF描述一对长度相同的向量吗?例如,我想使用这样的语法来捕获有效的点积运算,因为这样的运算需要相同长度的向量

我可以描述一个向量(我认为这是可以的):[1,2,3]

:=“[”“]”
::= |","
但我如何描述以下内容(也就是说,向量可以是任意长度的,但两个向量的长度是相同的;这可能吗?我在这方面是新手):[1,2,3,4],[5,6,7,8]

类似的东西

  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,)^kN 和k>0)


(端子符号以粗体显示)

Nice!虽然OP希望使用解析器生成器实现这一点,但分离两个向量会有点麻烦,在这种情况下,最好只匹配两个向量,然后在稍后的阶段检查两个向量的大小。但是:非常好的解决方案!确实非常好的解决方案!我坐了一分钟,详细讨论了它的elegance。谢谢!@Justin,如果这回答了你的问题,你可以接受它(参见答案左侧的复选标记)。
  S := [T]
  T := N,T,N | N],[N
  N := (any valid number)

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