using CodePlay.Core.Models;
using CodePlay.Core.Common;
namespace CodePlay.Core.Interfaces;
///
/// 语言解析器接口
///
public interface IParser
{
///
/// 解析源代码并生成 AST
///
/// 源代码
/// 取消令牌
/// 语法树
Task ParseAsync(string sourceCode, CancellationToken cancellationToken = default);
}
///
/// 代码转换器接口
///
public interface IConverter
{
///
/// 转换语法树
///
/// 源语言语法树
/// 目标语言
/// 转换选项
/// 取消令牌
/// 转换结果
Task ConvertAsync(SyntaxTree syntaxTree, LanguageType targetLanguage, ConversionOptions? options = null, CancellationToken cancellationToken = default);
}
///
/// 代码生成器接口
///
public interface ICodeGenerator
{
///
/// 从语法树生成代码
///
/// 语法树
/// 生成的代码
string Generate(SyntaxTree syntaxTree);
}
///
/// 编译验证器接口
///
public interface ICompilerValidator
{
///
/// 编译并验证代码
///
/// 代码
/// 语言类型
/// 取消令牌
/// 验证结果
Task ValidateAsync(string code, LanguageType language, CancellationToken cancellationToken = default);
}
///
/// 自动修复引擎接口
///
public interface IAutoFixEngine
{
///
/// 尝试修复编译错误
///
/// 代码
/// 编译错误列表
/// 当前修复轮次
/// 取消令牌
/// 修复结果
Task FixAsync(string code, List errors, int round, CancellationToken cancellationToken = default);
}
///
/// 转换策略接口
///
public interface IConversionStrategy
{
///
/// 源语言
///
LanguageType SourceLanguage { get; }
///
/// 目标语言
///
LanguageType TargetLanguage { get; }
///
/// 转换语法节点
///
/// 语法节点
/// 转换上下文
/// 转换后的节点
SyntaxNode ConvertNode(SyntaxNode node, ConversionContext context);
///
/// 映射类型
///
/// 源类型名称
/// 目标类型名称
string MapType(string sourceType);
}
///
/// 语法树
///
public class SyntaxTree
{
///
/// 语言类型
///
public LanguageType Language { get; set; }
///
/// 根节点
///
public SyntaxNode Root { get; set; } = new();
///
/// 源文件路径
///
public string? SourceFilePath { get; set; }
///
/// 原始源代码
///
public string? SourceCode { get; set; }
///
/// 注释列表
///
public List Comments { get; set; } = new();
///
/// 文档字符串列表
///
public List Documentation { get; set; } = new();
}
///
/// 语法节点
///
public class SyntaxNode
{
///
/// 节点类型
///
public SyntaxNodeType Type { get; set; }
///
/// 节点文本
///
public string Text { get; set; } = string.Empty;
///
/// 子节点列表
///
public List Children { get; set; } = new();
///
/// 元数据
///
public Dictionary Metadata { get; set; } = new();
///
/// 父节点
///
public SyntaxNode? Parent { get; set; }
///
/// 是否为不可转换语法
///
public bool IsUnconvertible { get; set; }
///
/// TODO 说明(当 IsUnconvertible 为 true 时)
///
public string? TodoDescription { get; set; }
}
///
/// 语法节点类型
///
public enum SyntaxNodeType
{
///
/// 未知
///
Unknown = 0,
///
/// 编译单元
///
CompilationUnit = 1,
///
/// 命名空间
///
Namespace = 2,
///
/// 类
///
Class = 3,
///
/// 接口
///
Interface = 4,
///
/// 方法
///
Method = 5,
///
/// 属性
///
Property = 6,
///
/// 字段
///
Field = 7,
///
/// 构造函数
///
Constructor = 8,
///
/// 语句
///
Statement = 9,
///
/// 表达式
///
Expression = 10,
///
/// 类型
///
Type = 11,
///
/// 参数
///
Parameter = 12,
///
/// 注释
///
Comment = 13,
///
/// 文档注释
///
DocumentationComment = 14
}
///
/// 语法注释
///
public class SyntaxComment
{
///
/// 注释类型
///
public CommentType Type { get; set; }
///
/// 注释文本
///
public string Text { get; set; } = string.Empty;
///
/// 行号
///
public int LineNumber { get; set; }
}
///
/// 注释类型
///
public enum CommentType
{
///
/// 单行注释 //
///
SingleLine = 0,
///
/// 多行注释 /* */
///
MultiLine = 1,
///
/// XML 文档注释 ///
///
XmlDoc = 2,
///
/// JavaDoc /** */
///
JavaDoc = 3,
///
/// Doxygen /// 或 /** */
///
Doxygen = 4
}
///
/// 语法文档
///
public class SyntaxDocumentation
{
///
/// 文档所属元素
///
public string ElementName { get; set; } = string.Empty;
///
/// 文档内容
///
public string Content { get; set; } = string.Empty;
///
/// 文档格式
///
public DocFormat Format { get; set; }
}
///
/// 文档格式
///
public enum DocFormat
{
///
/// XML Doc (C#)
///
XmlDoc = 0,
///
/// JavaDoc (Java)
///
JavaDoc = 1,
///
/// Doxygen (C++)
///
Doxygen = 2
}
///
/// 转换上下文
///
public class ConversionContext
{
///
/// 源语言
///
public LanguageType SourceLanguage { get; set; }
///
/// 目标语言
///
public LanguageType TargetLanguage { get; set; }
///
/// 转换选项
///
public ConversionOptions? Options { get; set; }
///
/// 问题列表
///
public List Issues { get; set; } = new();
///
/// TODO 列表
///
public List TodoItems { get; set; } = new();
///
/// 转换日志
///
public List Logs { get; set; } = new();
}
///
/// 修复结果
///
public class FixResult
{
///
/// 是否可以修复
///
public bool CanFix { get; set; }
///
/// 修复后的代码
///
public string? FixedCode { get; set; }
///
/// 修复说明
///
public string? FixDescription { get; set; }
///
/// 剩余错误列表
///
public List RemainingErrors { get; set; } = new();
}
///
/// 编译验证结果
///
public class CompilationResult
{
///
/// 是否成功
///
public bool Success { get; set; }
///
/// 编译输出
///
public string Output { get; set; } = string.Empty;
///
/// 错误列表
///
public List Errors { get; set; } = new();
///
/// 警告列表
///
public List Warnings { get; set; } = new();
}