优化项目结构
This commit is contained in:
parent
15c85c5a48
commit
530fb168c8
@ -7,7 +7,7 @@ import org.jcnc.snow.compiler.parser.ast.ModuleNode;
|
||||
import org.jcnc.snow.compiler.parser.context.ParserContext;
|
||||
import org.jcnc.snow.compiler.parser.ast.base.Node;
|
||||
import org.jcnc.snow.compiler.semantic.SemanticAnalyzer;
|
||||
import org.jcnc.snow.compiler.semantic.SemanticError;
|
||||
import org.jcnc.snow.compiler.semantic.expression.SemanticError;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
|
||||
import org.jcnc.snow.compiler.semantic.analyzers.AnalyzerRegistry;
|
||||
import org.jcnc.snow.compiler.semantic.expression.SemanticError;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.*;
|
||||
import org.jcnc.snow.compiler.semantic.analyzers.AnalyzerRegistry;
|
||||
import org.jcnc.snow.compiler.semantic.expression.*;
|
||||
import org.jcnc.snow.compiler.semantic.statement.*;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -8,12 +11,10 @@ import java.util.*;
|
||||
* 重构后的语义分析器,采用注册表 + 分析器组合的分而治之设计。
|
||||
*/
|
||||
public class SemanticAnalyzer {
|
||||
/** 内置类型映射表 */
|
||||
public static final Map<String, Type> BUILTIN_TYPES = Map.of(
|
||||
"int", BuiltinType.INT,
|
||||
"string", BuiltinType.STRING,
|
||||
"void", BuiltinType.VOID
|
||||
);
|
||||
/**
|
||||
* 内置类型映射表
|
||||
*/
|
||||
public static final Map<String, Type> BUILTIN_TYPES = Map.of("int", BuiltinType.INT, "string", BuiltinType.STRING, "void", BuiltinType.VOID);
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
private final Map<String, ModuleInfo> modules = new HashMap<>();
|
||||
@ -41,8 +42,7 @@ public class SemanticAnalyzer {
|
||||
registry.registerStatementAnalyzer(IfNode.class, new IfAnalyzer());
|
||||
registry.registerStatementAnalyzer(LoopNode.class, new LoopAnalyzer());
|
||||
registry.registerStatementAnalyzer(ReturnNode.class, new ReturnAnalyzer());
|
||||
registry.registerStatementAnalyzer(ExpressionStatementNode.class,
|
||||
(c, mi, fn, locals, stmt) -> {
|
||||
registry.registerStatementAnalyzer(ExpressionStatementNode.class, (c, mi, fn, locals, stmt) -> {
|
||||
var a = c.getRegistry().getExpressionAnalyzer(stmt.expression());
|
||||
a.analyze(c, mi, fn, locals, stmt.expression());
|
||||
});
|
||||
@ -55,8 +55,7 @@ public class SemanticAnalyzer {
|
||||
registry.registerExpressionAnalyzer(BinaryExpressionNode.class, new BinaryExpressionAnalyzer());
|
||||
// 兜底处理
|
||||
// 兜底:所有暂未实现的表达式都用 UnsupportedExpressionAnalyzer 处理
|
||||
registry.registerExpressionAnalyzer(MemberExpressionNode.class,
|
||||
new UnsupportedExpressionAnalyzer<>());
|
||||
registry.registerExpressionAnalyzer(MemberExpressionNode.class, new UnsupportedExpressionAnalyzer<>());
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.analyzers;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.base.StatementNode;
|
||||
import org.jcnc.snow.compiler.semantic.ExpressionAnalyzer;
|
||||
import org.jcnc.snow.compiler.semantic.StatementAnalyzer;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@ -1,7 +1,8 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.expression;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.BinaryExpressionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
|
||||
public class BinaryExpressionAnalyzer implements ExpressionAnalyzer<BinaryExpressionNode> {
|
||||
@Override
|
||||
@ -1,10 +1,11 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.expression;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.CallExpressionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.IdentifierNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.MemberExpressionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -1,7 +1,8 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.expression;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.IdentifierNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
|
||||
public class IdentifierAnalyzer implements ExpressionAnalyzer<IdentifierNode> {
|
||||
@Override
|
||||
@ -1,7 +1,8 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.expression;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.NumberLiteralNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
|
||||
public class NumberLiteralAnalyzer implements ExpressionAnalyzer<NumberLiteralNode> {
|
||||
@Override
|
||||
@ -1,4 +1,4 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.expression;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.base.Node;
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.expression;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.StringLiteralNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
|
||||
public class StringLiteralAnalyzer implements ExpressionAnalyzer<StringLiteralNode> {
|
||||
@Override
|
||||
@ -1,7 +1,8 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.expression;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.base.ExpressionNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
|
||||
// 之前:implements ExpressionAnalyzer<ExpressionNode>
|
||||
public class UnsupportedExpressionAnalyzer<E extends ExpressionNode>
|
||||
@ -1,7 +1,9 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.statement;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.AssignmentNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
import org.jcnc.snow.compiler.semantic.expression.SemanticError;
|
||||
|
||||
public class AssignmentAnalyzer implements StatementAnalyzer<AssignmentNode> {
|
||||
@Override
|
||||
@ -1,7 +1,9 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.statement;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.DeclarationNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
import org.jcnc.snow.compiler.semantic.expression.SemanticError;
|
||||
|
||||
public class DeclarationAnalyzer implements StatementAnalyzer<DeclarationNode> {
|
||||
@Override
|
||||
@ -1,7 +1,9 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.statement;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.IfNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
import org.jcnc.snow.compiler.semantic.expression.SemanticError;
|
||||
|
||||
public class IfAnalyzer implements StatementAnalyzer<IfNode> {
|
||||
@Override
|
||||
@ -1,7 +1,9 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.statement;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.LoopNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
import org.jcnc.snow.compiler.semantic.expression.SemanticError;
|
||||
|
||||
public class LoopAnalyzer implements StatementAnalyzer<LoopNode> {
|
||||
@Override
|
||||
@ -1,7 +1,9 @@
|
||||
package org.jcnc.snow.compiler.semantic;
|
||||
package org.jcnc.snow.compiler.semantic.statement;
|
||||
|
||||
import org.jcnc.snow.compiler.parser.ast.FunctionNode;
|
||||
import org.jcnc.snow.compiler.parser.ast.ReturnNode;
|
||||
import org.jcnc.snow.compiler.semantic.*;
|
||||
import org.jcnc.snow.compiler.semantic.expression.SemanticError;
|
||||
|
||||
public class ReturnAnalyzer implements StatementAnalyzer<ReturnNode> {
|
||||
@Override
|
||||
Loading…
x
Reference in New Issue
Block a user