小编gia*_*s.t的帖子

野牛:$ 1,$ 2等的备用订单提供了错误的输出

我正在使用野牛来构建用于教育目的的解析器。这是我非常简单的语法:

program: KW_VAR ident {printf("var %s\n", $2);} ;

ident:
 | IDENTIFIER OP_PLUS IDENTIFIER {sprintf($$, "%s + %s\n", $1, $3);}
 ;
Run Code Online (Sandbox Code Playgroud)

其中KW_VAR代表单词“ var”,OP_PLUS代表运算符“ +”。

var hello + hi是此语法可接受的短语。因此,当我使用上面的代码时,一切正常,printf给出:var hello + hi按预期。但是,当我尝试更改sprintf中$ 1,$ 3的顺序时,如下所示,printf给出:var hi + hi +。我期望的是var hi + hello

program: KW_VAR ident {printf("var %s\n", $2);} ;

ident:
 | IDENTIFIER OP_PLUS IDENTIFIER {sprintf($$, "%s + %s\n", $3, $1);}
 ;
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?我的代码有问题吗?

c bison

0
推荐指数
1
解决办法
162
查看次数

标签 统计

bison ×1

c ×1