0
我试图缩短我的野牛解析器一些重复的代码,这里有一个规则的摘录:问题与函数宏
expression : OBJECTID ASSIGN expression { $$ = std::make_shared<Assign>($1, $3); $$->setloc(@3.first_line, curr_filename); }
| expression '.' OBJECTID '(' method_expr_list ')' { $$ = std::make_shared<DynamicDispatch>($1, $3, $5);
$$->setloc(@1.first_line, curr_filename); }
我的线沿线的思考的东西:
expression : OBJECTID ASSIGN expression { $$ = std::make_shared<Assign>($1, $3); SETLOC(@1); }
| expression '.' OBJECTID '(' method_expr_list ')' { $$ = std::make_shared<DynamicDispatch>($1, $3, $5);
SETLOC(@1); }
我想不出任何其他方式来实现这一点,而不是使用宏来做到这一点。这是我想出了:
#define SETLOC(node) $$->setloc((node).first_line, curr_filename)
不幸的是,我得到一个编译错误说,$$没有定义,这是有道理的,因为它是一个函数宏。我想知道是否有办法在第二个代码段中实现代码?
,如果你这样做'#定义印记使用'SIGIL-> setloc(...)'会发生什么$$'和? – 2012-08-17 05:06:56