在qazxsw poi中为qazxsw poi解析器获取某种形式的上下文最常用的方法是什么,即在传统的yacc
中模拟goyacc
命令?
我需要解析我的%param
函数的一些上下文(在这种情况下包括例如构建其解析树的位置)。
qazxsw poi qazxsw poi的功能是qazxsw poi
yacc
我想到的事情:
.Parse
是一个接口,我可以将解析器上下文填充到Lexer实现中,然后强制类型转换goyacc
到该实现(假设我的解析器总是使用相同的词法分析器),但这看起来非常恶心(读取非惯用的)。此外(似乎)没有办法将用户生成的行放在.Parse
函数的顶部,如declared,所以在我想要引用这个变量的数十个地方,我必须使用相当丑陋的形式func ($$rcvr *$$ParserImpl) Parse($$lex $$Lexer) int {
而不是而不仅仅是$$ParserImpl
。.y
)中使用$$Lexer
,但这在$$lex
中不存在。什么是最惯用的解决方案?我一直在想我一定会错过一些简单的东西。
我自己的解决方案是修改Parse
(c := yylex.(*lexer).c
),它添加了一个yylex.(*lexer).c
指令,允许将一个或多个字段添加到c
结构中(可在代码中以%param
访问)。这似乎是最惯用的路线。这不仅允许传递上下文,而且还允许用户使用yacc
作为接收器添加额外的bison
s。