Python Test Case Generator
Project description
Matthew Shaw <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.
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.