classPlanBuilder
final class PlanBuilder
Compiles choices through the production generation pipeline into immutable instructions.
Methods§
public function __construct(
private Grammar $grammar,
private LexicalGrammar $lexical,
private ?TokenRewriter $rewriter = null,
private Closure(string|null): string|null $startSymbol = null,
)Parameters
$grammar | Grammar | |
$lexical | LexicalGrammar | |
$rewriter | ?TokenRewriter | |
$startSymbol | Closure(string|null): string|null | Resolves explicit release aliases |
Calls 3
- new TokenGenerator line 36
- new
Generatorline 36 - method-call LexicalGrammar::isNonOutput() line 36
public function minimumExpansions(GenerationPlan<bool> $plan): intIncludes descendant and repeated-occurrence constraints before drawing an expansion budget.
Parameters
$plan | GenerationPlan<bool> |
Returns
intTest cases 4
PlanBuilderTest::testMinimumExpansionsIncludesTheConstrainedDescendantBeforeDrawingTheBudgetcallsPlanBuilderTest::testMinimumExpansionsIncludesTheSelectedRootAlternativeBeforeAllocatingInputBudgetcallsPlanBuilderTest::testMinimumExpansionsKeepsTheNonEmptyRequirementSeparateFromNullabilitycallsPlanBuilderTest::testMinimumExpansionsRetainsNonEmptyCostsAndTheUnreachableSentinelForRootPatternscalls
Called from 2
Calls 2
- method-call TokenGenerator::minimumExpansions() line 45
- method-call PlanBuilder::root() line 45
public function root(GenerationPlan<bool> $plan): stringUses the grammar entry point unless the caller explicitly requests a rule.
Parameters
$plan | GenerationPlan<bool> |
Returns
stringTest cases 1
Called from 2
Calls 1
- method-call GenerationPlan::startRule() line 54
public function build<T of bool>(
GenerationPlan<T> $constraints,
int $budget,
Closure(int, non-empty-list<Production>): ?int $productionChoice,
Closure(int): ?int $lexicalChoice,
): GenerationPlan<T>Freezes original production ordinals and every rewritten terminal's complete candidate.
Parameters
$constraints | GenerationPlan<T> | |
$budget | int | |
$productionChoice | Closure(int, non-empty-list<Production>): ?int | |
$lexicalChoice | Closure(int): ?int |
Returns
Throws
GenerationException When the grammar cannot complete the plan within the budgetLexicalException When a terminal has no compatible realizationTest cases 7
PlanBuilderTest::testBuildFreezesScopedValuesAndDefaultsWhenChoiceBytesRunOutcallsPlanBuilderTest::testBuildPreservesEmptyMarkerCandidatesWithoutLosingNonEmptyCompletioncallsPlanBuilderTest::testBuildPreservesRepeatedProductionAndLexemeConstraintscallsPlanBuilderTest::testBuildPropagatesMissingCandidateFailuresWithoutRetryingcallsPlanBuilderTest::testBuildReportsAnUnknownRequestedRulecallsPlanBuilderTest::testBuildReservesAllPendingSiblingsAndRetainsTheOriginalOrdinalcallsPlanBuilderTest::testBuildUsesTheSameContextualRewriteAndPinsItsCompleteCandidatecalls
Called from 2
Calls 11
- method-call TokenGenerator::generate() line 71
- method-call PlanBuilder::root() line 71
- method-call GenerationPlan::withExpansionBudget() line 71
- static-call ProductionPattern::at() line 74
- method-call LexicalGrammar::resolveSequence() line 78
- function-call
implodeline 83 - function-call
array_mapline 83 - new GenerationPlan line 86
- method-call GenerationPlan::startRule() line 87
- method-call GenerationPlan::requiresNonEmpty() line 93
- method-call GenerationPlan::maxDepth() line 94
Private surface 5§
Implementation details, listed for orientation only.
private TokenGenerator $tokensprivate Grammar $grammarprivate LexicalGrammar $lexicalprivate ?TokenRewriter $rewriter = nullprivate Closure(string|null): string|null $startSymbol = nullTest cases 22§
Test cases that cover or call this symbol, from the coverage report and from the analyzed test sources.
Dedicated tests 12
PlanBuilderTest::testBuildFreezesScopedValuesAndDefaultsWhenChoiceBytesRunOutcallsPlanBuilderTest::testBuildPreservesEmptyMarkerCandidatesWithoutLosingNonEmptyCompletioncallsPlanBuilderTest::testBuildPreservesRepeatedProductionAndLexemeConstraintscallsPlanBuilderTest::testBuildPropagatesMissingCandidateFailuresWithoutRetryingcallsPlanBuilderTest::testBuildReportsAnUnknownRequestedRulecallsPlanBuilderTest::testBuildReservesAllPendingSiblingsAndRetainsTheOriginalOrdinalcallsPlanBuilderTest::testBuildUsesTheSameContextualRewriteAndPinsItsCompleteCandidatecallsPlanBuilderTest::testMinimumExpansionsIncludesTheConstrainedDescendantBeforeDrawingTheBudgetcallsPlanBuilderTest::testMinimumExpansionsIncludesTheSelectedRootAlternativeBeforeAllocatingInputBudgetcallsPlanBuilderTest::testMinimumExpansionsKeepsTheNonEmptyRequirementSeparateFromNullabilitycallsPlanBuilderTest::testMinimumExpansionsRetainsNonEmptyCostsAndTheUnreachableSentinelForRootPatternscallsPlanBuilderTest::testRootResolvesOnlyAnExplicitReleaseAliascalls
Other tests reaching this symbol 10
CreateTableTargetcallsRecoverTargetcallsBytePlanCompilerTest::testCompileMapsTheHeaderIntoTheAllowedExpansionRangecallsBytePlanCompilerTest::testCompileResolvesChoicesIntoInspectableReusableInstructionscallsBytePlanCompilerTest::testCompileSeparatesProductionChoicesFromLexemesAndCompletesAnOddInputcallsBytePlanEncoderTest::testEncodeMakesOpenLexicalChoicesTheWayTheCompilerReadsThePaddingcallsBytePlanEncoderTest::testEncodeStopsRecordingLexicalChoicesAtTheFirstNullAnswercallsBytePlanEncoderTest::testEncodeWritesBytesTheCompilerDecodesToTheRecordedChoicescallsBytePlanEncoderTest::testEncodeWritesTheHeaderRelativeToTheConstraintsMinimumAndDefaultMaximumcallsSqlGeneratorTestcalls
Relations§
Instantiated in 1
Method calls 4
- method-call SqlFaker\Generation\Choice\BytePlanCompiler::compile() packages/sql-faker/src/Generation/Choice/BytePlanCompiler.php:29
- method-call SqlFaker\Generation\Choice\BytePlanCompiler::compile() packages/sql-faker/src/Generation/Choice/BytePlanCompiler.php:45
- method-call SqlFaker\Generation\Choice\BytePlanEncoder::encode() packages/sql-faker/src/Generation/Choice/BytePlanEncoder.php:30
- method-call SqlFaker\Generation\Choice\BytePlanEncoder::encode() packages/sql-faker/src/Generation/Choice/BytePlanEncoder.php:38
Type declarations 6
- type SqlFaker\Generation\Choice\BytePlanCompiler packages/sql-faker/src/Generation/Choice/BytePlanCompiler.php:26
- type SqlFaker\Generation\Choice\BytePlanEncoder packages/sql-faker/src/Generation/Choice/BytePlanEncoder.php:27
- type SqlFaker\Generation\SqlGenerator packages/sql-faker/src/Generation/SqlGenerator.php:64
- type SqlFaker\MySql\MySqlProvider packages/sql-faker/src/MySql/MySqlProvider.php:84
- type SqlFaker\PostgreSql\PostgreSqlProvider packages/sql-faker/src/PostgreSql/PostgreSqlProvider.php:70
- type SqlFaker\Sqlite\SqliteProvider packages/sql-faker/src/Sqlite/SqliteProvider.php:70