Skip to content

Examples

US Postal Address

US Postal Address

Diagram(
    Sequence(
        Optional(
            Sequence(
                NonTerminal('Company Name', '', '', 'optional-path'),
                Terminal(',', '', '', 'optional-path')
            ),
            'skip'
        ),
        NonTerminal('Addressee Name'),
        Terminal(','),
        NonTerminal('Street One'),
        Terminal(','),
        Optional(
            Sequence(
                NonTerminal('Street Two', '', '', 'optional-path'),
                Terminal(',', '', '', 'optional-path')
            ),
            'skip'),
        NonTerminal('City'),
        Terminal(','),
        NonTerminal('State'),
        Terminal(','),
        NonTerminal('Postal Code')
    )
)

Cupcake Purchase

Cupcake Purchase

Diagram(
    Sequence(
        Group(
            Choice(
                1,
                NonTerminal('Cherry'),
                NonTerminal('Chocolate'),
                NonTerminal('Dark Chocolate')
            ),
            'Which cupcake?'
        ),
        Group(
            Choice(
                1,
                NonTerminal('Vanilla'),
                NonTerminal('Chocolate'),
                NonTerminal('Strawberry')
            ),
            'Which icing?'
        ),
        Group(
            ZeroOrMore(
                NonTerminal('Rainbow Sprinkles','','','optional-path'),
                Comment('Up to 4 shakes'),
                'skip'
            ),
            'Sprinkles?'
        ),
        NonTerminal('Pay'),
        NonTerminal('Eat'),
        Comment('Yummm!')
    )
)

Sonnet - English Form

Sonnet - English Form

Diagram(
  Stack(
    Group(
      Sequence( NonTerminal( "Rhyme A Line" ), NonTerminal( "Rhyme B Line" ), NonTerminal( "Rhyme A Line" ), NonTerminal( "Rhyme B Line" ) ),
      "Quatrain 1"
    ),
    Group(
      Sequence( NonTerminal( "Rhyme C Line" ), NonTerminal( "Rhyme D Line" ), NonTerminal( "Rhyme C Line" ), NonTerminal( "Rhyme D Line" ) ),
      "Quatrain 2"
    ),
    Group(
      Sequence( NonTerminal( "Rhyme E Line" ), NonTerminal( "Rhyme F Line" ), NonTerminal( "Rhyme E Line" ), NonTerminal( "Rhyme F Line" ) ),
      "Quatrain 3"
    ),
    Group(
      Sequence( NonTerminal( "Rhyme G Line" ), NonTerminal( "Rhyme G Line" ) ),
      "Couplet"
    )
  )
)

Animal Picker

Animal Picker

Diagram(
    NonTerminal("Number of Legs?"),
    Choice(1,
        Sequence(
            Comment("2"), 
            NonTerminal("Has Wings?"), 
            Choice(1,
                Sequence(
                    Comment("Yes"), 
                    NonTerminal("Bird"),    
                ),
                Sequence(
                    Comment("No"), 
                    NonTerminal("Human")
                )
            )        
        ),
        Sequence(
            Comment("4"), 
            NonTerminal("Purrs or Roars?"),
            Choice(1,
                Sequence(
                    Comment("Purrs"), 
                    NonTerminal("Cat")    
                ),
                Sequence(
                    Comment("Roars"), 
                    NonTerminal("Lion")
                ),
                Sequence(
                    Comment("Neither"), 
                    NonTerminal("Dog")
                )
            )
        ),
        Sequence(
            Comment("6"), 
            NonTerminal("Color?"),
            Choice(0,
                Sequence(
                    Comment("Black"), 
                    NonTerminal("Cricket")    
                ),
                Sequence(
                    Comment("Green"), 
                    NonTerminal("Grasshopper")
                ),
                Sequence(
                    Comment("Black and Yellow"), 
                    NonTerminal("Hornet")
                ),
                Sequence(
                    Comment("Other"), 
                    NonTerminal("Beetle")
                )
            )
        )
    )
)

Software Development Method

Software Development Method

Diagram(
    OneOrMore(
        Sequence(
            OneOrMore(
                MultipleChoice(
                    1,
                    'all',
                    NonTerminal('Design'),
                    NonTerminal('Model'),
                    NonTerminal('Mock')
                )
            ),
            NonTerminal('Build'),
            OneOrMore(
                Sequence(
                    OneOrMore(
                        NonTerminal('Test'),
                        NonTerminal('Debug', '', '', 'recurring-path')
                    ),
                    NonTerminal('Publish')
                ),
                NonTerminal('Find Bug', '', '', 'recurring-path')
            )
        ),
        Choice(
            0,
            NonTerminal('Determine New Features', '', '', 'recurring-path')
        )
    )
)

Number

Number

Diagram(
    Choice(
        0, 
        Skip(), 
        Terminal('+', '', '', 'optional-path'),
        Terminal('-', '', '', 'optional-path')
    ),
    Choice(
        1,
        OneOrMore(
            NonTerminal('digit')
        ),
        Sequence(
            '.',
            OneOrMore(
                NonTerminal('digit')
            )
        ),
        Sequence(
            OneOrMore(
                NonTerminal('digit')
            ),
            '.',
            OneOrMore(
                NonTerminal('digit')
            )
        )
    ),
    Choice(
        0,
        Skip(),
        Sequence(
            Choice(
                0, 
                Terminal('e', '', '', 'optional-path'), 
                Terminal('E', '', '', 'optional-path')
            ),
            Choice(
                0, 
                Skip(), 
                Terminal('+', '', '', 'optional-path'),
                Terminal('-', '', '', 'optional-path')
            ),
            OneOrMore(
                NonTerminal('digit', '', '', 'optional-path')
            )
        )
    )
)

String

String

Diagram(
    Choice(
        0,
        Sequence(
            '"',
            Choice(
                0,
                OneOrMore(
                    Choice(
                        0,
                        NonTerminal('not " or \\'),
                        NonTerminal('escape')
                    )
                ),
                Skip()
            ),
            '"'
        ),
        Sequence(
            "'",
            Choice(
                0,
                OneOrMore(
                    Choice(
                        0,
                        NonTerminal("not ' or \\"),
                        NonTerminal('escape')
                    )
                ),
                Skip()
            ),
            "'"
        )
    )
)

CSS Unicode Range

CSS Unicode Range

Diagram(
    Choice(
        0,
        'U',
        Terminal('u', '', '', 'optional-path')
    ),
    '+',
    Choice(
        1,
        Group(
            Sequence(
                OneOrMore(
                    NonTerminal('hex digit'), 
                    Comment('1-6 times')
                )
            ),
            'single code point'
        ),
        Group(
            Sequence(
                OneOrMore(
                    NonTerminal('hex digit'), 
                    Comment('1-6 times')
                ),
                '-',
                OneOrMore(
                    NonTerminal('hex digit'), 
                    Comment('1-6 times')
                )
            ),
            'code point range'
        ),
        Group(
            Sequence(
                ZeroOrMore(
                    NonTerminal('hex digit', '', '', 'optional-path'), 
                    Comment('1-5 times'),
                    'skip'
                ),
                OneOrMore(
                    '?', 
                    Comment('repeated so the total length is 6 digits')
                )
            ),
            'wildcard range'
        )
    )
)

SQL Statement

SQL Statement

Diagram(
    Stack(
        Sequence(
            'SELECT',
            Optional(
                Terminal('DISTINCT','','','optional-path'),
                'skip'
            ),
            Choice(
                0,
                OneOrMore(
                    Choice(
                        0,
                        Sequence(
                            NonTerminal('field name'), 
                            Optional(
                                Sequence(
                                    Terminal('AS', '', '', 'optional-path'),
                                    NonTerminal('alias', '', '', 'optional-path')
                                ),
                                'skip'
                            )
                        ),
                        Sequence(
                            NonTerminal('expression', '', '', 'optional-path'), 
                            Optional(
                                Sequence(
                                    Terminal('AS', '', '', 'optional-path'),
                                    NonTerminal('alias', '', '', 'optional-path')
                                ),
                                'skip'
                            )
                        )
                    ),
                    Terminal(',','','','recurring-path')
                ),
                Terminal('*','','','optional-path')
            ),
            'FROM',
            NonTerminal('table name'), 
            Optional(
                Sequence(
                    Terminal('AS', '', '', 'optional-path'),
                    NonTerminal('alias', '', '', 'optional-path')
                ),
                'skip'
            )
        ),
        Sequence(
            Optional(
                Sequence( 
                    Terminal('WHERE','','','optional-path'),
                    OneOrMore(
                        NonTerminal('condition','','','optional-path'),
                        Choice(
                            0,
                            Terminal('AND','','','recurring-path'),
                            Terminal('OR','','','recurring-path')
                        )
                    )
                ),
                'skip'
            ),
            Optional(
                Sequence(
                    Terminal('GROUP BY','','','optional-path'), 
                    OneOrMore(
                        NonTerminal('expressions','','','optional-path'),
                        Choice(
                            0,
                            Terminal('AND','','','recurring-path'),
                            Terminal('OR','','','recurring-path')
                        )
                    )
                ),
                'skip'
            ),
            Optional(
                Sequence(
                    Terminal('HAVING','','','optional-path'),  
                    OneOrMore(
                        NonTerminal('condition','','','optional-path'),
                        Choice(
                            0,
                            Terminal('AND','','','recurring-path'),
                            Terminal('OR','','','recurring-path')
                        )
                    )
                ),
                'skip'
            ),
        ),
        Sequence(
            Optional(
                Sequence(
                    Terminal('ORDER BY','','','optional-path'), 
                    OneOrMore(
                        Choice(
                            0,
                            Sequence(
                                NonTerminal('field name','','','optional-path'), 
                                Choice(
                                    0, 
                                    Skip(), 
                                    Terminal('ASC','','','optional-path'), 
                                    Terminal('DESC','','','optional-path')
                                )
                            ),                                
                            Sequence(
                                NonTerminal('expression','','','optional-path'), 
                                Choice(
                                    0, 
                                    Skip(), 
                                    Terminal('ASC','','','optional-path'), 
                                    Terminal('DESC','','','optional-path')
                                )
                            )
                        ), 
                        Terminal(',','','','recurring-path')
                    )
                ),
                'skip'
            ),
            Optional(
                Sequence(
                    Terminal('LIMIT','','','optional-path'),
                    Choice(
                        0, 
                        NonTerminal('count','','','optional-path'), 
                        Terminal('ALL','','','optional-path')
                    )
                ),
                'skip'
            ),
            Optional(
                Sequence(
                    Terminal('OFFSET','','','optional-path'), 
                    NonTerminal('start','','','optional-path'), 
                    Optional(
                        Terminal('ROWS','','','optional-path'),
                        'skip'
                    )
                ),
                'skip'
            )
        )
    )
)

Order Shipment Advice

Order Shipment Advice

Diagram(
    Stack(
        Sequence(
            NonTerminal('customerId'),
            NonTerminal('batchId'),
            NonTerminal('batchDate')
        ),
        OneOrMore(
            Group(
                Stack(
                    Sequence(
                        NonTerminal('customerOrderNumber'),
                        Optional(
                            Group(
                                Sequence(
                                    NonTerminal('name', '', '', 'optional-path'),
                                    NonTerminal('purchaseOrderNumber', '', '', 'optional-path'),
                                    Optional(
                                        NonTerminal('purchaseOrderDate', '', '', 'optional-path'),
                                        'skip'
                                    )
                                ),
                                'tradingPartner'
                            ),
                            'skip'
                        ),
                        Group(
                            Sequence(
                                NonTerminal('carrier'),
                                NonTerminal('service')
                            ),
                            'transport'
                        )
                    ),
                    Group(
                        Sequence(
                            Optional(
                                NonTerminal('companyName', '', '', 'optional-path'),
                                'skip'
                            ),
                            NonTerminal('contactName'),
                            NonTerminal('streetOne'),
                            Optional(
                                NonTerminal('streetTwo', '', '', 'optional-path'),
                                'skip'
                            ),
                            NonTerminal('city'),
                            NonTerminal('state'),
                            NonTerminal('postalCode'),
                            Optional(
                                NonTerminal('countryCode', '', '', 'optional-path'),
                                'skip'
                            )
                        ),
                        'shipToAddress'
                    ),
                    OneOrMore(
                        Group(
                            Sequence(
                                NonTerminal('item'),
                                NonTerminal('quantity'),
                                NonTerminal('uom'),
                                Optional(
                                    NonTerminal('lot', '', '', 'optional-path'),
                                    'skip'
                                )
                            ),
                            'detail'
                        )
                    )
                ),
                'shipmentAdvice'
            )
        )
    )
)