Skip to main content

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’.

Release files for nelly 0.7.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nelly 0.7.2
File Size Uploaded
nelly-0.7.2.tar.gz 22.7 kB Details

Release files / nelly-0.7.2.tar.gz

Download URL nelly-0.7.2.tar.gz
Size 22.7 kB
Tags Source
SHA-256 checksum
How to use checksums
c300a639a2ed35b3ada35226f75437b426302378aff29a99f86b899529497ac1
BLAKE2b-256 checksum
How to use checksums
bcc4c484a246c4c15be0220680286291a5fa99a34a16f340a91e5f0278f84749
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.8.10

Release history Release notifications | RSS feed

This release

0.7.2 This release

1 release file

0.7.1

1 release file

0.6.1

1 release file

0.6.0

1 release file

0.4.3

1 release file

0.4.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page