prop 0.47.0

Propositional logic with types in Rust
Documentation
// Rust-syntax in Piston-Meta for recursive analysis

_seps: "|!:.,;<>(){}[]"

29 , = [.w? "," .w?]
28 ; = [.w? ";" .w?]

27 trait_call_args = .s?(, ty)
26 trait_inh = {
    ["Fn" "(" .w? .s?(, ty) .w? ")" .w! "->" .w! ty]
  }
25 trait_arg = .._seps!
24 trait_args = .s?(, trait_arg)

27 type_args = .s?(, .._seps!)
26 branch = {
    [branch_pat .w! "=>" .w! {
      [expr {"," ?[.w? !.."}"!]}]
      ["{" .w? exprs .w? "}"]
    }]
  }
25 branch_pat = {
    [?.._seps! "(" .w? .s!(, branch_pat) .w? ")"]
    .._seps!
  }

24 call_gen_args = .s?(, ty)
23 call_args = .s?(, expr)
22 call = [.._seps!:"name" .r?({
    ["::<" .w? call_gen_args .w? ">"]
    ["::" .._seps!]
  }) {
    ["!" .r?({
      ["{" .w? macro_args .w? "}"]
      ["(" .w? macro_args .w? ")"]
    })]
    .r?(["(" .w? call_args .w? ")"])
  }
    ?[.w? "." call]
  ]

21 gen_constr = [.._seps! ?["<" .w? .s?(, ty) .w? ">"]]
20 where_expr = [.._seps! ?["<" .w? .s?(, .._seps!) .w? ">"] .w? ":" .w? gen_constr]
19 fn_decl_arg = [{
    branch_pat
    .._seps!
  } .w? ":" .w? struct_call]
18 fn_decl_args = .s?(, fn_decl_arg)
17 fn_decl = ["fn" .w! .._seps!:"name" ?["<" .w? gen_args .w? ">"]
  "(" .w? fn_decl_args .w? ")" .w? ?["->" .w? struct_call] .w?
  ?["where " .w? .s!.(, where_expr) .w?]
  "{" .w? ?["use " ...";"? ";"] .w? exprs .w? "}"]

16 impl_method = ["fn" .w! .._seps! "(" .w? .w? ")" .w? "->" .w? struct_call .w?
  "{" .w? exprs .w? "}"]

15 struct_args = .s?(, struct_call)
14 struct_call = [.._seps! ?["<" .w? struct_args .w? ">"]]
13 trait_call = [.._seps! ?["<" .w? trait_call_args .w? ">"]]
12 ty_fn_args = .s?(, ty)
11 ty = {
    ["fn" "(" .w? ty_fn_args .w? ")" .w! "->" .w! ty]
    struct_call
    .._seps!
  }

10 gen_args = .s?(, gen_arg)
9 gen_arg = [.._seps! .w? ?[":" .w? gen_constr]]

8 let = ["let " {
    ["(" .w? .._seps! , .._seps! .w? ")"]
    .._seps!:"name"
  } ?[.w? ":" .w? struct_call] .w! "=" .w! expr]

7 closure_arg = [{
    branch_pat
    .._seps!:"name"
  } .w? ?[":" .w! ty]]
6 closure_args = .s?(, closure_arg)

5 exprs = [.l([.w? fn_decl:"fn"]) .w? .s!.(; expr)]
4 expr = [.r?(["//" ..."\n"? .w?]) {
    ["tauto!(" .w? expr .w? ")"]
    let:"let"
    ["match " expr .w! "{" .w? .r?([.w? branch]) .w? "}"]
    [?"move " "|" .w? closure_args .w? "|" .w! {
      ["{" .w? exprs .w? "}"]
      expr
    }]
    ["(" .w? .s?(, expr) .w? ")"]
    call:"call"
    .._seps!
  }]

3 mod_decl = ["mod " .._seps!:"name" .w! "{" .w? doc .w? "}"]

2 macro_args = .r?([?"," .w? {
    ["$" .._seps! {.w! "," !..")"!}]
    .._seps!
  }])
1 macro_branch = ["(" .w? .r?([.w? {
    ["$" .._seps! ":" "tt" {.w! "," !..")"!}]
    .._seps!
  }]) .w? ")" .w! "=>" .w! "{" .w? doc .w? "}"]

0 doc = .l([.w? {
  ["//" ..."\n"?]
  ["impl<" .w? gen_args .w? ">" .w! trait_call .w! "for" .w! struct_call .w?
    "{" .w? .l(impl_method:"method") .w? "}"]
  ["#[" .._seps! ?["(" .w? .._seps! .w? ")"] "]"]
  ["macro_rules! " .._seps! .w! "{" .w? .s?(; macro_branch) .w? "}"]
  [?"pub " {
    ["use " ...";"? ";"]
    ["mod " ...";"? ";"]
    ["type " .._seps! ?["<" .w? type_args .w? ">"] .w! "=" .w! ty .w? ";"]
    ["trait " .._seps! ?["<" .w? trait_args .w? ">"] ?[":" .w! trait_inh .w!
      "{" .w? .w? "}"]]
    mod_decl:"mod"
    fn_decl:"fn"
  }]
  call
}])