Grammar BNF创建具有相同长度的向量
可以用BNF描述一对长度相同的向量吗?例如,我想使用这样的语法来捕获有效的点积运算,因为这样的运算需要相同长度的向量 我可以描述一个向量(我认为这是可以的):[1,2,3]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
:=“[”“]”
::= |","
但我如何描述以下内容(也就是说,向量可以是任意长度的,但两个向量的长度是相同的;这可能吗?我在这方面是新手):[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)