为什么在定义更多类型时 go yacc 解析器会崩溃?

why does go yacc parser panic while defining more types?

我写了一个 test.y 文件,类型更多。经过一定的限制,当我用命令编译文件时, 去工具 yacc 测试

它恐慌,"Index out of range in yacc.go:891" 当我查看文件 https://golang.org/src/cmd/yacc/yacc.go 时,我在定义常量中看到了这个注释 "the following are adjustable according to memory size" 他们在第 74 行(在上面 link 中提到的文件中)

中将类型定义的数量限制为 63(NTYPES = 63) 是有原因的吗

有趣 - 我使用 go tool yacc 相当多但没有注意到这个限制。

之所以如此,是因为 yacc.go 是从 C 程序移植而来的,您看到的是明显的直接移植。

查看 yacc.go 的代码,删除该限制并将 typeset 数组转换为切片会非常简单。

我会做的是open an issue (check a that there isn't an existing one - I didn't see one but I didn't look very carefully). Next if you are feeling brave submit a patch using the go contribution guidelines。这是为 go 本身做出贡献的好方法。

"It panics,"索引超出范围 yacc.go:891" "

我遇到了同样的问题,因为我需要更多类型(非术语和术语类型),而我为了解决这个问题所做的是更改几个值。

请看我的GitHub page documenting my change.

或者直接点击下面的URL。

https://github.com/MagnusTiberius/go/commit/d4eeb860229867c76d99e67d69bdbd7cc729ce2c