protected virtual void ProcessLexer()
{
// make sure all non-fragment lexer rules must match at least one symbol
foreach (Rule rule in g.rules.Values)
{
if (rule.IsFragment())
{
continue;
}
LL1Analyzer analyzer = new LL1Analyzer(g.atn);
IntervalSet look = analyzer.Look(g.atn.ruleToStartState[rule.index], PredictionContext.EmptyLocal);
if (look.Contains(TokenConstants.Epsilon))
{
g.tool.errMgr.GrammarError(ErrorType.EPSILON_TOKEN, g.fileName, ((GrammarAST)rule.ast.GetChild(0)).Token, rule.name);
}
}
}