Class AtnBasedGenerator
java.lang.Object
org.ek9lang.compiler.fuzz.AtnBasedGenerator
ATN-based random EK9 program generator.
Walks the ANTLR4 ATN (Augmented Transition Network) for the EK9 grammar,
making random choices at decision points to produce syntactically plausible programs.
Uses a template-based approach with ATN-generated details for high content density.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static final recordA generated function's signature, used for constructing valid call sites.(package private) static final recordA method's signature and access info, captured for call-site generation.(package private) static final recordA single parameter: name and type.(package private) static final recordA generated type with its methods, used for constructing valid call sites. -
Constructor Summary
ConstructorsConstructorDescriptionAtnBasedGenerator(int maxDepth) AtnBasedGenerator(int maxDepth, List<HarvestedTemplate> harvestedTemplates) Create a generator with harvested symbol data for richer name pools. -
Method Summary
Modifier and TypeMethodDescription(package private) voidappendArgumentParams(StringBuilder sb, int indent, List<AtnBasedGenerator.ParamInfo> params, Random random) (package private) voidappendCallArgs(StringBuilder sb, List<AtnBasedGenerator.ParamInfo> params, Random random) (package private) voidappendOperatorMisuse(StringBuilder sb, int indent, Random random) Operator misuse patterns — prefix operators used as suffix and vice versa.(package private) voidappendOtherLanguagePattern(StringBuilder sb, int indent, Random random) Inject patterns from other languages that EK9 deliberately rejects.(package private) voidappendSimpleStatement(StringBuilder sb, int indent, boolean inProgram, Random random) (package private) voidappendStatement(StringBuilder sb, int indent, boolean inProgram, Set<String> controlFlow, int nestingDepth, Random random) (package private) voidappendStatement(StringBuilder sb, int indent, boolean inProgram, Set<String> controlFlow, List<AtnBasedGenerator.TypeInfo> typeRegistry, List<AtnBasedGenerator.FunctionInfo> funcRegistry, Random random) (package private) voidappendStatement(StringBuilder sb, int indent, boolean inProgram, Set<String> controlFlow, Random random) (package private) static Stringcapitalise(String text) Generate a random EK9 program with guaranteed content using template-based generation.generateFromAtn(Random random) Generate a program by pure ATN walking (lower content density but broader grammar coverage).(package private) voidmaybeRequire(StringBuilder sb, String spaces, String varName, Random random) Reference a variable using a mix of patterns to exercise different compiler checks.(package private) StringrandomBuiltInType(Random random) (package private) StringrandomIdentifier(Random random) (package private) StringrandomLiteral(Random random) (package private) intrandomParamCount(Random random) Generate a random parameter count, weighted toward interesting ranges.(package private) StringrandomSimpleString(Random random) (package private) StringreturnInit(String type, Random random) (package private) ServiceConstructGeneratorProvide access to the service generator for specialized file generators.(package private) voidsetPolicy(GenerationPolicy policy) Set the generation policy for construct weighting.(package private) StringuniqueDispatchType(Set<String> usedTypes, Random random)
-
Constructor Details
-
AtnBasedGenerator
public AtnBasedGenerator(int maxDepth) -
AtnBasedGenerator
Create a generator with harvested symbol data for richer name pools.
-
-
Method Details
-
setPolicy
Set the generation policy for construct weighting. -
serviceGen
ServiceConstructGenerator serviceGen()Provide access to the service generator for specialized file generators. -
generate
Generate a random EK9 program with guaranteed content using template-based generation. Dispatches by probability: 40% single-file, 25% call-chain, 20% two-file, 15% three-file. -
randomParamCount
Generate a random parameter count, weighted toward interesting ranges. 40% 0-3, 30% 4-8, 20% 9-15, 10% 16-25. -
generateFromAtn
-
appendStatement
void appendStatement(StringBuilder sb, int indent, boolean inProgram, Set<String> controlFlow, Random random) -
appendStatement
void appendStatement(StringBuilder sb, int indent, boolean inProgram, Set<String> controlFlow, int nestingDepth, Random random) -
appendStatement
void appendStatement(StringBuilder sb, int indent, boolean inProgram, Set<String> controlFlow, List<AtnBasedGenerator.TypeInfo> typeRegistry, List<AtnBasedGenerator.FunctionInfo> funcRegistry, Random random) -
appendSimpleStatement
-
appendCallArgs
-
appendArgumentParams
void appendArgumentParams(StringBuilder sb, int indent, List<AtnBasedGenerator.ParamInfo> params, Random random) -
randomIdentifier
-
uniqueDispatchType
-
randomBuiltInType
-
returnInit
-
randomLiteral
-
randomSimpleString
-
capitalise
-
appendOtherLanguagePattern
Inject patterns from other languages that EK9 deliberately rejects. Triggers E01070-E01086 (break, continue, return, null, semicolons, new, goto, etc.). These simulate a developer migrating from Java/Python/C# and hitting EK9's guardrails. -
appendOperatorMisuse
Operator misuse patterns — prefix operators used as suffix and vice versa. Picks a random operator from the OperatorMap prefix/suffix sets. Triggers E01084 (PREFIX_OPERATOR_WRONG_POSITION) and E01085 (SUFFIX_OPERATOR_WRONG_POSITION). -
maybeRequire
Reference a variable using a mix of patterns to exercise different compiler checks. ~2.5% skip entirely (triggers E08090 NOT_REFERENCED). ~7.5% use require (triggers Steve's new require-without-use rule). ~90% genuine use via Stdout().println (passes through, variable is referenced).
-