package org.jcnc.snow.compiler.parser.factory;

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 java.util.Map;
import java.util.HashMap;

/**
 * {@code TopLevelParserFactory} 是一个顶层结构解析器工厂类，
 * 用于根据源文件起始关键字（如 {@code module}）动态选择相应的 {@link TopLevelParser} 实现。
 *
 * <p>
 * 每种顶层结构（如模块、导入等）应实现 {@link TopLevelParser} 接口，并在本工厂中静态注册，
 * 从而在语法分析阶段由 {@link ParserEngine} 根据关键字调用对应的解析器。
 * </p>
 *
 * <p>
 * 本类采用静态注册表机制，在类加载时将支持的关键字与其解析器一一映射并缓存于内部 Map 中。
 * 若调用时传入的关键字未注册，则返回 {@code null}，调用方应自行处理此情况。
 * </p>
 */
public class TopLevelParserFactory {
    /** 顶层关键字 -> 顶层结构解析器 的映射表 */
    private static final Map<String, TopLevelParser> registry = new HashMap<>();

    static {
        // 注册顶层结构解析器
        registry.put("module", new ModuleParser());
    }

    /**
     * 根据给定关键字获取对应的顶层结构解析器。
     *
     * @param keyword 顶层结构关键字（例如 "module"）。
     * @return 对应的 {@link TopLevelParser} 实例；若关键字未注册，则返回 {@code null}。
     */
    public static TopLevelParser get(String keyword) {
        return registry.get(keyword);
    }
}
