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
|
#include "production.ih"
void Production::insertAction(Production const *prod, std::ostream &out,
bool lineDirectives, size_t indent)
{
if (! prod->hasAction())
return;
out << setw(indent) << "" << "case " << prod->nr() << ":\n";
size_t begin = 0;
Block const &block = prod->action();
if (lineDirectives)
out << "#line " << block.lineNr() << " \"" << block.source() <<
"\"\n";
while (true)
{
size_t end = block.find_first_of('\n', begin);
out << setw(indent) << "" <<
block.substr(begin, end - begin) << "\n";
if (end == string::npos)
break;
begin = end + 1;
}
out << setw(indent) << "" << "break;\n"
"\n";
}
|