Go 在Ragel中使用带有扫描块的堆栈的正确方法是什么?

Go 在Ragel中使用带有扫描块的堆栈的正确方法是什么?,go,fsm,ragel,Go,Fsm,Ragel,我正在使用Ragel 6.10和Go。我确信这可能是我的代码有问题,但当我尝试使用带有扫描块的堆栈时,会出现一些奇怪的错误。我正在尝试设置括号匹配,我的代码大致如下所示 ObjectValues := |* # other stuff '}' => { fret; }; *| main := ('{' @{fcall ObjectValues;})*; 看看指南第46页,看起来这应该是可能的。当我运行RagelRagel-G2-zmain.rl时。我在尝试编译时遇到以下错误(它只

我正在使用Ragel 6.10和Go。我确信这可能是我的代码有问题,但当我尝试使用带有扫描块的堆栈时,会出现一些奇怪的错误。我正在尝试设置括号匹配,我的代码大致如下所示

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

main := ('{' @{fcall ObjectValues;})*;
看看指南第46页,看起来这应该是可能的。当我运行Ragel
Ragel-G2-zmain.rl
时。我在尝试编译时遇到以下错误(它只发生在-G2 FSM生成中)

注释掉fret行将删除错误,并警告无法访问POSTOP和prepush

完整的代码在这里

这里有一个工作的最小测试用例

测试用例错误

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在V6.10中生成的代码有关的问题。使用ragel-6分支的负责人解决了这个问题。感谢Adrian Thurston通过Twitter做出的超级响应/帮助。:)

重新格式化此文件中的代码

对这一错误进行修正

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