Skip to main content

Python Test Case Generator

Project description

Matthew Shaw <mshaw.cx@gmail.com>

<%pre
    import sys
%>

::NT(start)
    : 'A' # comment
    | 'B' <% print($$) %>
    ;

<%post
    print($$)
%>

Constants

Constants in productions can consist of double-quoted strings, single-quoted strings, decimal, hexadecimal.

A: "A" | 'A' | \d65 | \x41;

Concatenation

Productions are concatenated when they are seperated by white-space.

CONCAT: "CONC" \x41 "TEN" \d65 "TION";

Selection

When multiple productions are present one is chosen at random.

NUMBER: '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';

Grouping

GRP: ('A'|'B') ('C'|'D');

Possible values are ‘AC’, ‘AD’, ‘BC’, or ‘BD’.

Ranges

NUM1: ('0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'){3};
NUM2: ('0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'){1,5};

NUM1 will generate a 3-digit number while NUM2 will generate a number of random length between 1 and 5 digits.

Slicing

A sub-string of a production can be referenced using indices.

SLICE1: "0123456789" [:];    // 0123456789
SLICE2: "0123456789" [4];    // 4
SLICE3: "0123456789" [:4];   // 0123
SLICE4: "0123456789" [4:];   // 456789
SLICE5: "0123456789" [2:8];  // 234567
SLICE6: "0123456789" [-4];   // 6
SLICE7: "0123456789" [-4:];  // 6789
SLICE8: "0123456789" [:-4];  // 012345
SLICE9: "0123456789" [2:-2]; // 234567

The output of each production is documented in the comment proceeding it.

Inline Python

<%pre
    import base64
%>

NT: %base64.b64encode('string');

Non-Terminals

NT1: "The value of NT2 is " NT2;
NT2: "substitution";

Semantic Actions

$$

PSA1: PSA2 <% var = $$ %>;
PSA2: "one" | "two";

In this example the Python variable var will contain either ‘one’ or ‘two’ for future use.

Variable Non-Terminals

$*

NT1: $NT2;

$NT2:
  "I WILL BE SUBSTITUTED INTO NT1 IN LOWERCASE"
  <%
    $* = $$.lower()
  %>
  ;

Back Reference

BR: "A" | "B";
NT: BR \BR;
$BR: ("a"|"b") <% $* = $$.upper() %>;
NT: $BR \$BR;

In both cases NT will generate the string ‘AA’ or ‘BB’ but not ‘AB’ or ‘BA’.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nelly-0.7.2.tar.gz (22.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page