diff --git a/src/macro/Parser.yy b/src/macro/Parser.yy index 0bd4749f0b1eb506cecc30efcd7cef0632bfc416..e6ba09dc79e0e38a6d86da9102621290fda44f6f 100644 --- a/src/macro/Parser.yy +++ b/src/macro/Parser.yy @@ -149,19 +149,19 @@ directive_multiline : for | ifndef ; -for : FOR { driver.pushContext(); } NAME IN expr EOL statements ENDFOR +for_begin : FOR { driver.pushContext(); } ; + +for : for_begin symbol IN expr EOL statements ENDFOR { - vector<VariablePtr> vvnp = {make_shared<Variable>($3, driver.env, @3)}; + vector<VariablePtr> vvnp = {$2}; auto vdp = driver.popContext(); - vdp.emplace_back(make_shared<TextNode>("\n", driver.env, @8)); - $$ = make_shared<For>(vvnp, $5, vdp, driver.env, @$); + vdp.emplace_back(make_shared<TextNode>("\n", driver.env, @7)); + $$ = make_shared<For>(vvnp, $4, vdp, driver.env, @$); } - ; - -for : FOR { driver.pushContext(); } LPAREN comma_name RPAREN IN expr EOL statements ENDFOR + | for_begin LPAREN comma_name RPAREN IN expr EOL statements ENDFOR { vector<VariablePtr> vvnp; - for (auto & it : $4) + for (auto & it : $3) { auto vnp = dynamic_pointer_cast<Variable>(it); if (!vnp) @@ -169,8 +169,8 @@ for : FOR { driver.pushContext(); } LPAREN comma_name RPAREN IN expr EOL stateme vvnp.push_back(vnp); } auto vdp = driver.popContext(); - vdp.emplace_back(make_shared<TextNode>("\n", driver.env, @10)); - $$ = make_shared<For>(vvnp, $7, vdp, driver.env, @$); + vdp.emplace_back(make_shared<TextNode>("\n", driver.env, @9)); + $$ = make_shared<For>(vvnp, $6, vdp, driver.env, @$); } ;