grammar;
pub X = "x";
// pub Expr: () = {
// Expr "+" Expr => (),
// Expr "-" Expr => (),
// "0" => (),
// "1" => (),
// };
// Cat = "c";
// #[inline] Tiger = Cat;
// Animal = {
// "-" <Cat>,
// "-" <Tiger>,
// };
// pub Foo = {
// <"x"> Animal,
// <"y"> Animal,
// };
// Spanned<T> = @L <T> @R;
// // Spanned<T> = "l" <T> "r";
// // Spanned<T> = <T>;
// Word: () = "a" => ();
// // #[inline]
// Bar: () = <@L> <Word> <@R> "!" => ();
// ProxyA = <@L> <Word> <@R> "~";
// ProxyB = <@L> <Bar> <@R> "+";
// ProxyA,
// ProxyB,
// @L <"a"> @R,
// @L @L <"a"> @R "+" @R,
// Num: () = @L "1" @R => ();
// Num: i32 = "1" => 1;
// Plus: ExprType = {
// Num => ExprType::Num(<>),
// <ll: @L> <lhs: Plus> <lr: @R> "+" <rl: @L> <rhs: Num> <rr: @R> => ExprType::Add (
// Box::new(Expr { inner: lhs, span: (ll, lr) }),
// Box::new(Expr { inner: rhs, span: (rl, rr) }),
// ),
// };
// pub Expr: Expr = {
// <l: @L> <inner: Plus> <r: @R> => Expr { inner: inner, span: (l, r) },
// };
// Bar: () = <Spanned<Word>> "!" => ();
// ProxyA = <Spanned<Word>> "~";
// ProxyB = <Spanned<Bar>> "+";
// ChildA = "a";
// ChildB = Spanned<"b">;
// ParentHelper = ChildB ChildA;
// pub Parent = Spanned<ParentHelper>;
// pub Statement = {
// Assignment,
// LabeledStatement,
// };
// LabeledStatement = <Spanned<Word>> ":" Statement;
// Assignment = <Spanned<Spanned<Word>>> "~";
// pub Foo = Bar;
// Bar: () = {
// "x" =>? {
// Ok(())
// }
// };