1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#include "parser.ih"
Parser::STYPE_ Parser::handleProductionElements(STYPE_ &first,
STYPE_ const &second)
{
// the first PTag was a %prec specification
if (first.tag() == Tag_::END_TAG_)
return second;
// the second PTag was a %prec specification:
if (second.tag() == Tag_::END_TAG_)
return first; // postpone handling of first
// maybe also when currentRule == 0 ? See addProduction
if (!d_rules.hasRules()) // may happen if the first rule could not be
return first; // defined because of token/rulename clash
switch (first.tag())
{
case Tag_::TERMINAL:
d_rules.addElement(first.get<Tag_::TERMINAL>());
break;
case Tag_::SYMBOL:
d_rules.addElement(first.get<Tag_::SYMBOL>());
break;
case Tag_::BLOCK:
nestedBlock(first.get<Tag_::BLOCK>());
break;
default: // can't occur, but used to keep the
break; // compiler from generating a warning
}
return second;
}
|