我在Go上使用Ragel 6.10。我确定我的代码可能是一个问题,但是当我尝试将堆栈与扫描器块一起使用时,出现一些奇怪的错误。我正在尝试设置括号匹配,我的代码大致如下所示;

ObjectValues := |*
 # other stuff
 '}' => { fret; };
 *|

main := ('{' @{fcall ObjectValues;})*;

查看指南中的第46页,似乎应该可以实现。当我运行Ragel ragel -G2 -Z main.rl时。尝试编译时出现以下错误(仅在-G2 FSM生成时发生);
graphql_collections.rl:47[/Users/nathanfisher/workspace/go/src/github.com/nfisher/gir/graphql_collections.go:325:2]: syntax error: unexpected goto at end of statement
graphql_collections.go:60[/Users/nathanfisher/workspace/go/src/github.com/nfisher/gir/graphql_collections.go:60:1]: label _again defined and not used

注释掉品格行可消除错误,并警告postpop和prepush无法访问。

完整的代码在这里;

https://github.com/nfisher/gir/blob/broken/graphql_collections.rl#L47

一个有效的最小测试用例在这里;

https://gist.github.com/nfisher/649ca816f82bb3ccd7164331ac2324ac

测试用例错误;
main.rl:13[/Users/nathanfisher/workspace/go/src/github.com/nfisher/gir/command/runner/main.go:119:2]: syntax error: unexpected goto at end of statement
main.go:59[/Users/nathanfisher/workspace/go/src/github.com/nfisher/gir/command/runner/main.go:59:1]: label _again defined and not used

最佳答案

看起来这是与Ragel在6.10版中生成的代码有关的问题。使用ragel-6分支的HEAD可以解决此问题。感谢Adrian Thurston通过Twitter做出的 super 响应/帮助。 :)

重新格式化代码;

go - 在Ragel中使用带有扫描仪模块的堆叠的正确方法是什么?-LMLPHP

这样可以解决错误;

go - 在Ragel中使用带有扫描仪模块的堆叠的正确方法是什么?-LMLPHP

关于go - 在Ragel中使用带有扫描仪模块的堆叠的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48517257/

10-08 23:40