优化项目结构

This commit is contained in:
Luke 2025-04-28 11:01:37 +08:00
parent adffcad19d
commit 35efce2dd4
26 changed files with 119 additions and 52 deletions

View File

@ -2,12 +2,12 @@ package org.jcnc.snow.compiler;
import org.jcnc.snow.compiler.lexer.LexerEngine; import org.jcnc.snow.compiler.lexer.LexerEngine;
import org.jcnc.snow.compiler.lexer.token.Token; import org.jcnc.snow.compiler.lexer.token.Token;
import org.jcnc.snow.compiler.parser.ParserEngine; import org.jcnc.snow.compiler.parser.core.ParserEngine;
import org.jcnc.snow.compiler.parser.ast.ModuleNode; import org.jcnc.snow.compiler.parser.ast.ModuleNode;
import org.jcnc.snow.compiler.parser.context.ParserContext; import org.jcnc.snow.compiler.parser.context.ParserContext;
import org.jcnc.snow.compiler.parser.ast.base.Node; import org.jcnc.snow.compiler.parser.ast.base.Node;
import org.jcnc.snow.compiler.semantic.SemanticAnalyzer; import org.jcnc.snow.compiler.semantic.core.SemanticAnalyzer;
import org.jcnc.snow.compiler.semantic.expression.SemanticError; import org.jcnc.snow.compiler.semantic.error.SemanticError;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;

View File

@ -1,4 +1,4 @@
package org.jcnc.snow.compiler.parser; package org.jcnc.snow.compiler.parser.core;
import org.jcnc.snow.compiler.lexer.token.TokenType; import org.jcnc.snow.compiler.lexer.token.TokenType;
import org.jcnc.snow.compiler.parser.base.TopLevelParser; import org.jcnc.snow.compiler.parser.base.TopLevelParser;

View File

@ -1,6 +1,7 @@
package org.jcnc.snow.compiler.parser.factory; package org.jcnc.snow.compiler.parser.factory;
import org.jcnc.snow.compiler.parser.base.TopLevelParser; import org.jcnc.snow.compiler.parser.base.TopLevelParser;
import org.jcnc.snow.compiler.parser.core.ParserEngine;
import org.jcnc.snow.compiler.parser.module.ModuleParser; import org.jcnc.snow.compiler.parser.module.ModuleParser;
import java.util.Map; import java.util.Map;
@ -13,7 +14,7 @@ import java.util.HashMap;
* <p>该类采用静态注册机制在类加载时将所有支持的关键字及其解析器实例注册到内部映射表中 * <p>该类采用静态注册机制在类加载时将所有支持的关键字及其解析器实例注册到内部映射表中
* 外部通过 {@link #get(String)} 方法获取对应的解析器</p> * 外部通过 {@link #get(String)} 方法获取对应的解析器</p>
* *
* <p>用于 {@link org.jcnc.snow.compiler.parser.ParserEngine} 根据关键字动态解析不同语法块</p> * <p>用于 {@link ParserEngine} 根据关键字动态解析不同语法块</p>
*/ */
public class TopLevelParserFactory { public class TopLevelParserFactory {
// 存储关键字 -> 解析器 实例的映射关系 // 存储关键字 -> 解析器 实例的映射关系

View File

@ -2,10 +2,10 @@ package org.jcnc.snow.compiler.semantic.analyzers;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode;
import org.jcnc.snow.compiler.semantic.Context; import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.ModuleInfo; import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.SymbolTable; import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.Type; import org.jcnc.snow.compiler.semantic.type.Type;
/** /**
* 表达式分析器接口 * 表达式分析器接口

View File

@ -2,9 +2,9 @@ package org.jcnc.snow.compiler.semantic.analyzers;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.base.StatementNode; import org.jcnc.snow.compiler.parser.ast.base.StatementNode;
import org.jcnc.snow.compiler.semantic.Context; import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.ModuleInfo; import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.SymbolTable; import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
/** /**
* 语句分析器接口 * 语句分析器接口

View File

@ -1,9 +1,14 @@
package org.jcnc.snow.compiler.semantic.expression; package org.jcnc.snow.compiler.semantic.analyzers.expression;
import org.jcnc.snow.compiler.parser.ast.BinaryExpressionNode; import org.jcnc.snow.compiler.parser.ast.BinaryExpressionNode;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer;
import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;
public class BinaryExpressionAnalyzer implements ExpressionAnalyzer<BinaryExpressionNode> { public class BinaryExpressionAnalyzer implements ExpressionAnalyzer<BinaryExpressionNode> {
@Override @Override

View File

@ -1,12 +1,18 @@
package org.jcnc.snow.compiler.semantic.expression; package org.jcnc.snow.compiler.semantic.analyzers.expression;
import org.jcnc.snow.compiler.parser.ast.CallExpressionNode; import org.jcnc.snow.compiler.parser.ast.CallExpressionNode;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.IdentifierNode; import org.jcnc.snow.compiler.parser.ast.IdentifierNode;
import org.jcnc.snow.compiler.parser.ast.MemberExpressionNode; import org.jcnc.snow.compiler.parser.ast.MemberExpressionNode;
import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer;
import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.FunctionType;
import org.jcnc.snow.compiler.semantic.type.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@ -1,9 +1,15 @@
package org.jcnc.snow.compiler.semantic.expression; package org.jcnc.snow.compiler.semantic.analyzers.expression;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.IdentifierNode; import org.jcnc.snow.compiler.parser.ast.IdentifierNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer;
import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.Symbol;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;
public class IdentifierAnalyzer implements ExpressionAnalyzer<IdentifierNode> { public class IdentifierAnalyzer implements ExpressionAnalyzer<IdentifierNode> {
@Override @Override

View File

@ -1,9 +1,13 @@
package org.jcnc.snow.compiler.semantic.expression; package org.jcnc.snow.compiler.semantic.analyzers.expression;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.NumberLiteralNode; import org.jcnc.snow.compiler.parser.ast.NumberLiteralNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer;
import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;
public class NumberLiteralAnalyzer implements ExpressionAnalyzer<NumberLiteralNode> { public class NumberLiteralAnalyzer implements ExpressionAnalyzer<NumberLiteralNode> {
@Override @Override

View File

@ -1,9 +1,13 @@
package org.jcnc.snow.compiler.semantic.expression; package org.jcnc.snow.compiler.semantic.analyzers.expression;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.StringLiteralNode; import org.jcnc.snow.compiler.parser.ast.StringLiteralNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer;
import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;
public class StringLiteralAnalyzer implements ExpressionAnalyzer<StringLiteralNode> { public class StringLiteralAnalyzer implements ExpressionAnalyzer<StringLiteralNode> {
@Override @Override

View File

@ -1,9 +1,14 @@
package org.jcnc.snow.compiler.semantic.expression; package org.jcnc.snow.compiler.semantic.analyzers.expression;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode; import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.ExpressionAnalyzer;
import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;
// 之前implements ExpressionAnalyzer<ExpressionNode> // 之前implements ExpressionAnalyzer<ExpressionNode>
public class UnsupportedExpressionAnalyzer<E extends ExpressionNode> public class UnsupportedExpressionAnalyzer<E extends ExpressionNode>

View File

@ -1,10 +1,15 @@
package org.jcnc.snow.compiler.semantic.statement; package org.jcnc.snow.compiler.semantic.analyzers.statement;
import org.jcnc.snow.compiler.parser.ast.AssignmentNode; import org.jcnc.snow.compiler.parser.ast.AssignmentNode;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer;
import org.jcnc.snow.compiler.semantic.expression.SemanticError; import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.Symbol;
import org.jcnc.snow.compiler.semantic.symbol.SymbolKind;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.Type;
public class AssignmentAnalyzer implements StatementAnalyzer<AssignmentNode> { public class AssignmentAnalyzer implements StatementAnalyzer<AssignmentNode> {
@Override @Override

View File

@ -1,10 +1,16 @@
package org.jcnc.snow.compiler.semantic.statement; package org.jcnc.snow.compiler.semantic.analyzers.statement;
import org.jcnc.snow.compiler.parser.ast.DeclarationNode; import org.jcnc.snow.compiler.parser.ast.DeclarationNode;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer;
import org.jcnc.snow.compiler.semantic.expression.SemanticError; import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.Symbol;
import org.jcnc.snow.compiler.semantic.symbol.SymbolKind;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;
public class DeclarationAnalyzer implements StatementAnalyzer<DeclarationNode> { public class DeclarationAnalyzer implements StatementAnalyzer<DeclarationNode> {
@Override @Override

View File

@ -1,10 +1,14 @@
package org.jcnc.snow.compiler.semantic.statement; package org.jcnc.snow.compiler.semantic.analyzers.statement;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.IfNode; import org.jcnc.snow.compiler.parser.ast.IfNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer;
import org.jcnc.snow.compiler.semantic.expression.SemanticError; import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;
public class IfAnalyzer implements StatementAnalyzer<IfNode> { public class IfAnalyzer implements StatementAnalyzer<IfNode> {
@Override @Override

View File

@ -1,10 +1,14 @@
package org.jcnc.snow.compiler.semantic.statement; package org.jcnc.snow.compiler.semantic.analyzers.statement;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.LoopNode; import org.jcnc.snow.compiler.parser.ast.LoopNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer;
import org.jcnc.snow.compiler.semantic.expression.SemanticError; import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.Type;
public class LoopAnalyzer implements StatementAnalyzer<LoopNode> { public class LoopAnalyzer implements StatementAnalyzer<LoopNode> {
@Override @Override

View File

@ -1,10 +1,15 @@
package org.jcnc.snow.compiler.semantic.statement; package org.jcnc.snow.compiler.semantic.analyzers.statement;
import org.jcnc.snow.compiler.parser.ast.FunctionNode; import org.jcnc.snow.compiler.parser.ast.FunctionNode;
import org.jcnc.snow.compiler.parser.ast.ReturnNode; import org.jcnc.snow.compiler.parser.ast.ReturnNode;
import org.jcnc.snow.compiler.semantic.*;
import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer; import org.jcnc.snow.compiler.semantic.analyzers.StatementAnalyzer;
import org.jcnc.snow.compiler.semantic.expression.SemanticError; import org.jcnc.snow.compiler.semantic.core.Context;
import org.jcnc.snow.compiler.semantic.core.ModuleInfo;
import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.FunctionType;
import org.jcnc.snow.compiler.semantic.type.Type;
public class ReturnAnalyzer implements StatementAnalyzer<ReturnNode> { public class ReturnAnalyzer implements StatementAnalyzer<ReturnNode> {
@Override @Override

View File

@ -1,7 +1,8 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.core;
import org.jcnc.snow.compiler.semantic.type.Type;
import org.jcnc.snow.compiler.semantic.analyzers.AnalyzerRegistry; import org.jcnc.snow.compiler.semantic.analyzers.AnalyzerRegistry;
import org.jcnc.snow.compiler.semantic.expression.SemanticError; import org.jcnc.snow.compiler.semantic.error.SemanticError;
import java.util.*; import java.util.*;

View File

@ -1,4 +1,6 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.core;
import org.jcnc.snow.compiler.semantic.type.FunctionType;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

View File

@ -1,9 +1,16 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.core;
import org.jcnc.snow.compiler.parser.ast.*; import org.jcnc.snow.compiler.parser.ast.*;
import org.jcnc.snow.compiler.semantic.analyzers.AnalyzerRegistry; import org.jcnc.snow.compiler.semantic.analyzers.AnalyzerRegistry;
import org.jcnc.snow.compiler.semantic.expression.*; import org.jcnc.snow.compiler.semantic.error.SemanticError;
import org.jcnc.snow.compiler.semantic.statement.*; import org.jcnc.snow.compiler.semantic.analyzers.expression.*;
import org.jcnc.snow.compiler.semantic.analyzers.statement.*;
import org.jcnc.snow.compiler.semantic.symbol.Symbol;
import org.jcnc.snow.compiler.semantic.symbol.SymbolKind;
import org.jcnc.snow.compiler.semantic.symbol.SymbolTable;
import org.jcnc.snow.compiler.semantic.type.BuiltinType;
import org.jcnc.snow.compiler.semantic.type.FunctionType;
import org.jcnc.snow.compiler.semantic.type.Type;
import java.util.*; import java.util.*;

View File

@ -1,4 +1,4 @@
package org.jcnc.snow.compiler.semantic.expression; package org.jcnc.snow.compiler.semantic.error;
import org.jcnc.snow.compiler.parser.ast.base.Node; import org.jcnc.snow.compiler.parser.ast.base.Node;

View File

@ -1,4 +1,6 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.symbol;
import org.jcnc.snow.compiler.semantic.type.Type;
/** /**
* 表示符号表Symbol Table中的一条符号记录 * 表示符号表Symbol Table中的一条符号记录

View File

@ -1,4 +1,4 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.symbol;
/** /**
* 表示符号的种类Symbol Kind * 表示符号的种类Symbol Kind

View File

@ -1,4 +1,4 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.symbol;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;

View File

@ -1,4 +1,4 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.type;
/** /**
* 内置基础类型枚举 * 内置基础类型枚举

View File

@ -1,4 +1,4 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.type;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;

View File

@ -1,4 +1,4 @@
package org.jcnc.snow.compiler.semantic; package org.jcnc.snow.compiler.semantic.type;
/** /**
* 类型接口所有具体类型内置类型函数类型等都应实现此接口 * 类型接口所有具体类型内置类型函数类型等都应实现此接口