vkdoom_m/tools/re2c/src/parse/spec.h
2016-02-06 20:58:35 -06:00

55 lines
744 B
C++

#ifndef _RE2C_PARSE_SPEC_
#define _RE2C_PARSE_SPEC_
#include "src/ir/regexp/regexp_rule.h"
#include "src/parse/rules.h"
namespace re2c
{
struct Spec
{
RegExp * re;
rules_t rules;
Spec ()
: re (NULL)
, rules ()
{}
Spec (const Spec & spec)
: re (spec.re)
, rules (spec.rules)
{}
Spec & operator = (const Spec & spec)
{
re = spec.re;
rules = spec.rules;
return *this;
}
bool add_def (RuleOp * r)
{
if (rules.find (rule_rank_t::def ()) != rules.end ())
{
return false;
}
else
{
add (r);
return true;
}
}
void add (RuleOp * r)
{
rules[r->rank].line = r->loc.line;
re = mkAlt (re, r);
}
void clear ()
{
re = NULL;
rules.clear ();
}
};
} // namespace re2c
#endif // _RE2C_PARSE_SPEC_