Skip to main content

Python Test Case Generator

Project description

Matthew Oertle <moertle@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, or octal numbers.

A: "A" | 'A' | 65 | 0x41 | 0101;

Concatenation

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

CONCAT: "CONC" 0x41 "TEN" 65 "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.

Files for nelly, version 0.6.1
Filename, size File type Python version Upload date Hashes
Filename, size nelly-0.6.1.tar.gz (14.1 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page