File: insertaction.cc

package info (click to toggle)
bisonc%2B%2B 6.09.02-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,984 kB
  • sloc: cpp: 9,375; ansic: 1,505; fortran: 1,134; makefile: 1,062; sh: 526; yacc: 84; lex: 60
file content (33 lines) | stat: -rw-r--r-- 801 bytes parent folder | download | duplicates (6)
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";
}