package net.minecraft.util.parsing.packrat; import java.util.Optional; public interface Rule { Optional parse(ParseState p_335539_); static Rule fromTerm(Term p_334127_, Rule.RuleAction p_334890_) { return new Rule.WrappedTerm<>(p_334890_, p_334127_); } static Rule fromTerm(Term p_336211_, Rule.SimpleRuleAction p_332994_) { return new Rule.WrappedTerm<>((p_331302_, p_331658_) -> Optional.of(p_332994_.run(p_331658_)), p_336211_); } @FunctionalInterface public interface RuleAction { Optional run(ParseState p_332162_, Scope p_335135_); } @FunctionalInterface public interface SimpleRuleAction { T run(Scope p_332535_); } public static record WrappedTerm(Rule.RuleAction action, Term child) implements Rule { @Override public Optional parse(ParseState p_328860_) { Scope scope = new Scope(); return this.child.parse(p_328860_, scope, Control.UNBOUND) ? this.action.run(p_328860_, scope) : Optional.empty(); } } }