private void CheckCommands(string command, IToken commandToken)
{
// Command combinations list: https://github.com/antlr/antlr4/issues/1388#issuecomment-263344701
if (!command.Equals("pushMode") && !command.Equals("popMode"))
{
if (ruleCommands.Contains(command))
{
g.tool.errMgr.GrammarError(ErrorType.DUPLICATED_COMMAND, g.fileName, commandToken, command);
}
if (!ruleCommands.Equals("mode"))
{
string firstCommand = null;
if (command.Equals("skip"))
{
if (ruleCommands.Contains("more"))
{
firstCommand = "more";
}
else if (ruleCommands.Contains("type"))
{
firstCommand = "type";
}
else if (ruleCommands.Contains("channel"))
{
firstCommand = "channel";
}
}
else if (command.Equals("more"))
{
if (ruleCommands.Contains("skip"))
{
firstCommand = "skip";
}
else if (ruleCommands.Contains("type"))
{
firstCommand = "type";
}
else if (ruleCommands.Contains("channel"))
{
firstCommand = "channel";
}
}
else if (command.Equals("type") || command.Equals("channel"))
{
if (ruleCommands.Contains("more"))
{
firstCommand = "more";
}
else if (ruleCommands.Contains("skip"))
{
firstCommand = "skip";
}
}
if (firstCommand != null)
{
g.tool.errMgr.GrammarError(ErrorType.INCOMPATIBLE_COMMANDS, g.fileName, commandToken, firstCommand, command);
}
}
}
ruleCommands.Add(command);
}