package io.gitlab.jfronny.muscript.compiler; import io.gitlab.jfronny.muscript.ast.*; import io.gitlab.jfronny.muscript.ast.bool.*; import io.gitlab.jfronny.muscript.ast.compare.Equal; import io.gitlab.jfronny.muscript.ast.compare.Greater; import io.gitlab.jfronny.muscript.ast.conditional.UnresolvedConditional; import io.gitlab.jfronny.muscript.ast.dynamic.*; import io.gitlab.jfronny.muscript.ast.dynamic.assign.DynamicAssign; import io.gitlab.jfronny.muscript.ast.literal.DynamicLiteral; import io.gitlab.jfronny.muscript.ast.math.*; import io.gitlab.jfronny.muscript.ast.string.Concatenate; import io.gitlab.jfronny.muscript.compiler.lexer.LegacyLexer; import io.gitlab.jfronny.muscript.compiler.lexer.Lexer; import io.gitlab.jfronny.muscript.data.Script; import io.gitlab.jfronny.muscript.data.dynamic.additional.DFinal; import io.gitlab.jfronny.muscript.error.*; import org.jetbrains.annotations.Nullable; import java.util.*; public class Parser extends VersionedComponent { private final Lexer lexer; private Lexer.Token previous = null; public static Expr parse(MuScriptVersion version, String source) { return parse(version, source, null); } public static Expr parse(MuScriptVersion version, String source, String file) { return new Parser(new LegacyLexer(version, source, file)).parse().optimize(); } public static Script parseScript(MuScriptVersion version, String source) { return parseScript(version, source, null); } public static Script parseScript(MuScriptVersion version, String source, String file) { return new Parser(new LegacyLexer(version, source, file)).parseScript().optimize(); } public static Script parseMultiScript(MuScriptVersion version, String startFile, SourceFS filesystem) { return new Script(parseMultiScript(version, startFile, filesystem, new HashSet<>()).stream().flatMap(Script::stream).toList()); } private static List