public void Validate(LexerSpec lexer)
        {
            var modeReferenceErrors = Modes.Except(lexer.Modes).ToList();

            if (modeReferenceErrors.Any())
            {
                throw new Exception($"Rule '{Name}' references mode(s) not in lexer spec: '{string.Join("', '", modeReferenceErrors)}'");
            }
            ValidateCommands(lexer);
            Expression.Validate(lexer);
        }