Parse::RandGen::Rule - Grammatical Rule object


A Rule matches if any one of its Productions match the input text. In BNF notation, the relationship of Rules and Productions is:

  rule1:         production1
               | production2
               | production3

For example:

  perlFuncCall:  /&?/ identifier '(' argument(s?) ')'
               | scalar '->' identifier '(' argument(s?) ')'

The two productions in this example could respectively match:

    "func()",  "func(x, y)",  or "&func(x)"



Creates a new Rule. The Rule name is the only required argument. Productions are optional.

    Parse::RandGen::Rule->new (
        name => "perlFuncCall",     # Rule name (optional if an anonymous rule)

        # "prod" specifies a new Production object on this Rule
        prod => [ name => "staticFuncCall",   # Production name is optional
                  cond => qr/&?/,                  # Regexp  Condition - 0 or 1 '&' characters
                  cond => "indentifier",           # Subrule Condition - exactly 1 "identifier" rule
                  cond => q{'('},                  # Literal Condition - single '(' character
                  cond => "argument(s?)",          # Subrule Condition - 0 or more "argument" rules
                  cond => q{')'}, ],               # Literal Condition - single ')' character
        prod => [ name => "objectFuncCall",   # Rule's second production
                  cond => "scalar",
                  cond => q{'->'},
                  cond => "indentifier",
                  cond => q{'('},
                  cond => "argument(s?)",
                  cond => q{')'}, ],

Return the name of the Rule.


Returns a reference to the Grammar that the Rule belongs to.


Randomly generate data (text) that matches (or does not) the rule.

Takes a "match" boolean argument that specifies whether to match the regular expression or deliberately not match it.

Also takes a "vals" hash argument that has pairs of subrules (name or reference) and their desired value. This allows the generated data to have user-specified constraints while allowing the rest of the rule to choose random data. If "match" is false, the user-specified "vals" are still used (which may cause the data to match even though it was not supposed to). If a user-specified value is given, then productions that do not reference that rule are not chosen (unless no productions reference the rule).

        $re->pick(match=>0, vals=>{ file=>"Rule", extension=>"pm" });


Parse::RandGen, Parse::RandGen::Grammar, Parse::RandGen::Production, and Parse::RandGen::Condition


Jeff Dutton