Class AtnBasedGenerator

java.lang.Object
org.ek9lang.compiler.fuzz.AtnBasedGenerator

public final class AtnBasedGenerator extends Object
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.
  • Constructor Details

    • AtnBasedGenerator

      public AtnBasedGenerator(int maxDepth)
    • AtnBasedGenerator

      public AtnBasedGenerator(int maxDepth, List<HarvestedTemplate> harvestedTemplates)
      Create a generator with harvested symbol data for richer name pools.
  • Method Details

    • setPolicy

      void setPolicy(GenerationPolicy policy)
      Set the generation policy for construct weighting.
    • serviceGen

      Provide access to the service generator for specialized file generators.
    • generate

      public GenerationResult generate(Random random)
      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

      int randomParamCount(Random random)
      Generate a random parameter count, weighted toward interesting ranges. 40% 0-3, 30% 4-8, 20% 9-15, 10% 16-25.
    • generateFromAtn

      public String generateFromAtn(Random random)
      Generate a program by pure ATN walking (lower content density but broader grammar coverage).
    • 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

      void appendSimpleStatement(StringBuilder sb, int indent, boolean inProgram, Random random)
    • appendCallArgs

      void appendCallArgs(StringBuilder sb, List<AtnBasedGenerator.ParamInfo> params, Random random)
    • appendArgumentParams

      void appendArgumentParams(StringBuilder sb, int indent, List<AtnBasedGenerator.ParamInfo> params, Random random)
    • randomIdentifier

      String randomIdentifier(Random random)
    • uniqueDispatchType

      String uniqueDispatchType(Set<String> usedTypes, Random random)
    • randomBuiltInType

      String randomBuiltInType(Random random)
    • returnInit

      String returnInit(String type, Random random)
    • randomLiteral

      String randomLiteral(Random random)
    • randomSimpleString

      String randomSimpleString(Random random)
    • capitalise

      static String capitalise(String text)
    • appendOtherLanguagePattern

      void appendOtherLanguagePattern(StringBuilder sb, int indent, Random random)
      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

      void appendOperatorMisuse(StringBuilder sb, int indent, Random random)
      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

      void maybeRequire(StringBuilder sb, String spaces, String varName, Random random)
      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).