1#![allow(unused)]
7macro_rules! expr {
8 (@expf [$($f:tt)*][$([$($x:tt)*])*]) => {$($f)*($(expr!(@exp+ $($x)*)),*)};
10 (@expf [$($f:tt)*][$([$($x:tt)*])*][$($y:tt)*]) => {expr!(@expf [$($f)*][$([$($x)*])*[$($y)*]])}; (@expf [$($f:tt)*][$([$($x:tt)*])*][$($y:tt)*] , $($t:tt)*) => {expr!(@expf [$($f)*][$([$($x)*])*[$($y)*]][] $($t)*)}; (@expf [$($f:tt)*][$([$($x:tt)*])*][$($y:tt)*] $h:tt $($t:tt)*) => {expr!(@expf [$($f)*][$([$($x)*])*][$($y)*$h] $($t)*)}; (@expf [$($f:tt)*] $($t:tt)*) => {expr!(@expf [$($f)*][][] $($t)*)}; (@expt $fun:ident($($t:tt)*)) => {expr!(@expf [Expr::$fun] $($t)*)};
16 (@expt $col:ident) => {Expr::col(stringify!($col))};
18 (@expt $val:literal) => {Expr::val($val)};
19 (@expt ($($t:tt)*)) => {(expr!($($t)*))};
20 (@exp/ [$($x:tt)*]) => {expr!(@expt $($x)*)}; (@exp/ [$($x:tt)*] / $($t:tt)*) => {Expr::divide(expr!(@expt $($x)*), expr!(@exp/ $($t)*))}; (@exp/ [$($x:tt)*] $h:tt $($t:tt)*) => {expr!(@exp/ [$($x)* $h] $($t)*)}; (@exp/ $($t:tt)*) => {expr!(@exp/ [] $($t)*)}; (@exp* [$($x:tt)*]) => {expr!(@exp/ $($x)*)}; (@exp* [$($x:tt)*] * $($t:tt)*) => {Expr::multiply(expr!(@exp/ $($x)*), expr!(@exp* $($t)*))}; (@exp* [$($x:tt)*] $h:tt $($t:tt)*) => {expr!(@exp* [$($x)* $h] $($t)*)}; (@exp* $($t:tt)*) => {expr!(@exp* [] $($t)*)}; (@exp- [$($x:tt)*]) => {expr!(@exp* $($x)*)}; (@exp- [$($x:tt)*] - $($t:tt)*) => {Expr::minus(expr!(@exp* $($x)*), expr!(@exp- $($t)*))}; (@exp- [$($x:tt)*] $h:tt $($t:tt)*) => {expr!(@exp- [$($x)* $h] $($t)*)}; (@exp- $($t:tt)*) => {expr!(@exp- [] $($t)*)}; (@exp+ [$($x:tt)*]) => {expr!(@exp- $($x)*)}; (@exp+ [$($x:tt)*] + $($t:tt)*) => {Expr::plus(expr!(@exp- $($x)*), expr!(@exp+ $($t)*))}; (@exp+ [$($x:tt)*] $h:tt $($t:tt)*) => {expr!(@exp+ [$($x)* $h] $($t)*)}; (@exp+ $($t:tt)*) => {expr!(@exp+ [] $($t)*)}; ($($t:tt)*) => {expr!(@exp+ $($t)*)};
42}