package top.r394realms.ltdmanagertest.command import top.r3944realms.ltdmanager.module.common.AdvancedCommandParser /** * 参数提取演示类 */ class ParameterExtractionDemo { companion object { // 默认参数模式:<参数名> 或 [可选参数名] val DEFAULT_PARAMETER_PATTERN = Regex("""<(\w+)>|\[(\w+)]""") // 常用参数模式 val ANGLE_BRACKETS = Regex("""<(\w+)>""") // - 必需参数 val SQUARE_BRACKETS = Regex("""\[(\w+)]""") // [param] - 可选参数 val CURLY_BRACES = Regex("""\{(\w+)}""") // {param} - 自定义参数 } /** * 从语法字符串中提取参数名 */ fun extractParameterNames(syntax: String, pattern: Regex): List { if (syntax.isEmpty()) return emptyList() return pattern.findAll(syntax).map { matchResult -> // 从捕获组中提取参数名(处理不同的括号类型) matchResult.groupValues[1].ifEmpty { matchResult.groupValues[2] } }.toList() } /** * 演示场景1:只需要必需参数(参数验证) */ fun demoRequiredParameters() { println("=== 场景1:必需参数验证 ===") val syntax = "send [target] [priority]" val parser = AdvancedCommandParser().apply { registerCommand( "ls", syntax = syntax, parameterPattern = ANGLE_BRACKETS, ) } println(parser.getCommandHelp("ls")) // 模拟用户输入验证 val testCases = listOf( "ls send Hello", // 有效:提供了必需参数 "ls send Hello @all", // 有效:提供了必需参数和可选参数 "ls send" // 无效:缺少必需参数 ) testCases.forEach { input -> println("输入: $input") val result = parser.parseAndValidate(input) if (result.isValid) { println("✓ 命令: ${result.command}") println("✓ 参数:") result.arguments.forEach { (key, value) -> println(" $key: $value") } } else { println("✗ 错误: ${result.errorMessage}") } println("-".repeat(50)) } println() } /** * 演示场景2:需要所有参数(完整解析) */ fun demoAllParameters() { println("=== 场景2:完整参数解析 ===") val syntax = "user [name] [age] [email]" val parser = AdvancedCommandParser().apply { registerCommand( "ls", syntax = syntax, ) } println(parser.getCommandHelp("ls")) // 模拟参数映射 val testInput = "ls user add 123 John 30 john@example.com" println("输入: $testInput") val result = parser.parseAndValidate(testInput) if (result.isValid) { println("✓ 命令: ${result.command}") println("✓ 参数:") result.arguments.forEach { (key, value) -> println(" $key: $value") } } else { println("✗ 错误: ${result.errorMessage}") } println("-".repeat(50)) } /** * 演示场景3:自定义参数格式 */ fun demoCustomParameters() { println("=== 场景3:自定义参数格式 ===") val customSyntax = "execute {command} {args} --timeout {timeout} --retry {retries}" extractParameterNames(customSyntax, CURLY_BRACES) val parser = AdvancedCommandParser().apply { registerCommand( "ls", syntax = customSyntax, parameterPattern = CURLY_BRACES, ) } println(parser.getCommandHelp("ls")) // 模拟命名参数解析 val testInput = "ls execute {ls -la} {--help} --timeout 30 --retry 3" val result = parser.parseAndValidate(testInput) if (result.isValid) { println("✓ 命令: ${result.command}") println("✓ 参数:") result.arguments.forEach { (key, value) -> println(" $key: $value") } } else { println("✗ 错误: ${result.errorMessage}") } println("-".repeat(5)) } /** * 综合演示:完整的命令处理流程 */ fun demoCompleteWorkflow() { println("=== 综合演示:完整工作流程 ===") // 定义复杂的命令语法 val syntax = "ls database [where] [limit] [offset] --format {format}" val parser1 = AdvancedCommandParser().apply { registerCommand( "ls", syntax = syntax, parameterPattern = DEFAULT_PARAMETER_PATTERN, ) } // 模拟真实命令处理 val testCommand = "ls database select users --where \"age > 18\" --limit 10 --format json" val result = parser1.parseAndValidate(testCommand) if (result.isValid) { println("✓ 命令: ${result.command}") println("✓ 参数:") result.arguments.forEach { (key, value) -> println(" $key: $value") } } else { println("✗ 错误: ${result.errorMessage}") } println("-".repeat(5)) } } /** * 主函数运行演示 */ fun main() { val demo = ParameterExtractionDemo() // 运行各个演示场景 demo.demoRequiredParameters() demo.demoAllParameters() demo.demoCustomParameters() demo.demoCompleteWorkflow() // 额外演示:不同语法模式对比 println("\n=== 语法模式对比 ===") val syntaxes = listOf( "cmd [opt1] [opt2]", "run {command} {args}", "test [output] --mode {mode} --verbose {flag}" ) syntaxes.forEach { syntax -> println("\n语法: $syntax") println("尖括号参数: ${demo.extractParameterNames(syntax, ParameterExtractionDemo.ANGLE_BRACKETS)}") println("方括号参数: ${demo.extractParameterNames(syntax, ParameterExtractionDemo.SQUARE_BRACKETS)}") println("花括号参数: ${demo.extractParameterNames(syntax, ParameterExtractionDemo.CURLY_BRACES)}") println("所有参数: ${demo.extractParameterNames(syntax, ParameterExtractionDemo.DEFAULT_PARAMETER_PATTERN)}") } }