File: determinefirst.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 (25 lines) | stat: -rw-r--r-- 789 bytes parent folder | download | duplicates (11)
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
#include "rules.ih"

void Rules::determineFirst()
{
    size_t lastCount = 0;     // counts the number of first-elements.

    while (true)
    {
        // Process all non-terminals (N). Handle all the production rules of
        // these non-terminals. For an empty production, the N gets <empty>.
        // For non-empty productions: add those element's first symbols, and
        // stop if an element has no empty production. If, at the end, the
        // final element has an empty production, add <empty> as well

        NonTerminal::resetCounter();

        for_each(d_nonTerminal.begin(), d_nonTerminal.end(),
                    &NonTerminal::setFirst);

        if (lastCount == NonTerminal::counter())
            break;

        lastCount = NonTerminal::counter();
    }
}