def bnf(): return ruiko.And([ ruiko.Bind('instruction', ruiko.Named('arg')), ruiko.Seq( ruiko.Or([ ruiko.Push('args', ruiko.Bind('last', ruiko.Named('arg'))), ruiko.Push('kwargs', ruiko.Bind('last', ruiko.Named('flag'))), ruiko.Push('kwargs', ruiko.Bind('last', ruiko.Named('must'))) ]), 0, -1), ruiko.Seq( ruiko.And([ ruiko.C('|'), ruiko.Bind('and_then', ruiko.Named('command')) ]), 0, 1) ])
def bnf(): return ruiko.Bind( 'result', ruiko.And([ ruiko.Or([ruiko.C('https:'), ruiko.C('http:')]), ruiko.C('//'), ruiko.Seq(ruiko.N('pattern'), 1, -1), ruiko.Seq(ruiko.And([ruiko.C('/'), ruiko.N('pattern')]), 0, -1), ruiko.Seq(ruiko.C('/'), 0, 1) ]))
def bnf(): return ruiko.Or([ ruiko.Bind('str', ruiko.N('Str')), ruiko.Bind('str', ruiko.N('DoubleQuotedStr')), ruiko.Bind('pat', ruiko.N('pattern')), ruiko.Bind('expr', ruiko.Named('quote')), ruiko.Bind('expr', ruiko.Named('closure')), ruiko.Bind('expr', ruiko.Named('placeholder')) ])
def bnf(): return ruiko.And([ ruiko.Seq(ruiko.N('Alpha'), 1, -1), ruiko.Bind('n1', ruiko.N('Num')), ruiko.Bind('n2', ruiko.N('Num')) ])
def bnf(): return ruiko.And( [ruiko.C('--'), ruiko.Bind('key', ruiko.N('pattern'))])
def bnf(): return ruiko.And([ ruiko.C('`'), ruiko.Bind('cmd', ruiko.Named('command')), ruiko.C('`') ])
def bnf(): return ruiko.And([ruiko.C('$'), ruiko.Bind('arg', ruiko.Named('arg'))])
def bnf(): return ruiko.And([ ruiko.C('-'), ruiko.Bind('key', ruiko.N('pattern')), ruiko.Bind('value', ruiko.Named('arg')) ])