internal virtual bool CheckOptions(GrammarAST parent,
IToken optionID,
GrammarAST valueAST)
{
bool ok = true;
if (parent.Type == ANTLRParser.BLOCK)
{
if (g.IsLexer() && !Grammar.LexerBlockOptions.Contains(optionID.Text))
{ // block
g.tool.errMgr.GrammarError(ErrorType.ILLEGAL_OPTION,
g.fileName,
optionID,
optionID.Text);
ok = false;
}
if (!g.IsLexer() && !Grammar.ParserBlockOptions.Contains(optionID.Text))
{ // block
g.tool.errMgr.GrammarError(ErrorType.ILLEGAL_OPTION,
g.fileName,
optionID,
optionID.Text);
ok = false;
}
}
else if (parent.Type == ANTLRParser.RULE)
{
if (!Grammar.ruleOptions.Contains(optionID.Text))
{ // rule
g.tool.errMgr.GrammarError(ErrorType.ILLEGAL_OPTION,
g.fileName,
optionID,
optionID.Text);
ok = false;
}
}
else if (parent.Type == ANTLRParser.GRAMMAR &&
!LegalGrammarOption(optionID.Text))
{ // grammar
g.tool.errMgr.GrammarError(ErrorType.ILLEGAL_OPTION,
g.fileName,
optionID,
optionID.Text);
ok = false;
}
return ok;
}