using CodePlay.Core.Interfaces; using CodePlay.Core.Common; using CodePlay.Core.Models; using System.Text; namespace CodePlay.Core.Converters; /// /// Python 到 C# 转换器 /// public class PythonToCSharpConverter : IConverter { public async Task ConvertAsync( SyntaxTree syntaxTree, LanguageType targetLanguage, ConversionOptions? options = null, CancellationToken cancellationToken = default) { var result = new ConversionResult { TransformedCode = ConvertToCSharp(syntaxTree.SourceCode ?? ""), Report = new ConversionReport() }; await Task.CompletedTask; return result; } private string ConvertToCSharp(string pythonCode) { var sb = new StringBuilder(); sb.AppendLine("// 从 Python 转换而来 - 需要手动审查"); sb.AppendLine(); var lines = pythonCode.Split('\n'); foreach (var line in lines) { var trimmed = line.Trim(); if (string.IsNullOrEmpty(trimmed)) { sb.AppendLine(); continue; } // Python import -> C# using if (trimmed.StartsWith("import ")) { var module = trimmed.Substring(7).Trim(); sb.AppendLine($"// using {module}; // TODO: 映射 .NET 命名空间"); continue; } // Python class -> C# class var classMatch = System.Text.RegularExpressions.Regex.Match(trimmed, @"class\s+(\w+)"); if (classMatch.Success) { sb.AppendLine($"public class {classMatch.Groups[1].Value}"); sb.AppendLine("{"); continue; } // Python def -> C# method var defMatch = System.Text.RegularExpressions.Regex.Match(trimmed, @"def\s+(\w+)\s*\(([^)]*)\)"); if (defMatch.Success) { var methodName = defMatch.Groups[1].Value; var parameters = defMatch.Groups[2].Value; sb.AppendLine($" public void {methodName}({ConvertPythonParams(parameters)})"); sb.AppendLine(" {"); sb.AppendLine(" // TODO: 实现方法体"); sb.AppendLine(" }"); continue; } // 检测类结束(缩进减少) if (trimmed.StartsWith("}") || line.TrimStart().Length == line.Length) { sb.AppendLine("}"); } } return sb.ToString(); } private string ConvertPythonParams(string pythonParams) { if (string.IsNullOrWhiteSpace(pythonParams)) return ""; var parts = pythonParams.Split(','); var csharpParams = new List(); foreach (var part in parts) { var param = part.Trim(); if (param == "self") continue; csharpParams.Add($"object {param}"); } return string.Join(", ", csharpParams); } }