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 38 39 40 41 42 43 44 45 46 47
|
#include "generator.ih"
void Generator::tokens(ostream &out) const
{
Terminal::ConstVector tokens;
for (auto terminal: d_rules.terminals())
selectSymbolic(terminal, tokens);
key(out);
if (tokens.size() == 0) // no tokens, but tokens.h is
out << "// No symbolic tokens were defined\n"; // written
sort(tokens.begin(), tokens.end(), Terminal::compareValues);
ofstream outTokens;
if (not d_options.useTokenPath())
d_writer.useStream(out);
else
{
outTokens = tokenPath();
d_writer.useStream(outTokens);
}
d_writer.insert(tokens);
if (d_options.useTokenPath())
{
string const &ns = d_options.tokenNameSpace();
// {, matching:
outTokens << "};\n" <<
(
ns.empty() ?
""
:
"\n" // {, matching:
"} // " + ns + '\n'
) <<
"\n"
"#endif\n";
}
}
|