Řekl bych, že když se to používá s mírou, tak to může zlepšit čitelnost.
Třeba operátory @@
, >>=
, |>
.
Pak je otázkou, zda to některé knihovny trošku nepřehánějí. Třeba v F# je knihovna Farkle pro parsování, kde gramatiky lze psát
let expression = let NEG = obj() let expression = nonterminal "Expression" expression.SetProductions( !@ number |> asIs, !@ expression .>> "+" .>>. expression => (fun x1 x2 -> x1 + x2), !@ expression .>> "-" .>>. expression => (fun x1 x2 -> x1 - x2), !@ expression .>> "*" .>>. expression => (fun x1 x2 -> x1 * x2), !@ expression .>> "/" .>>. expression => (fun x1 x2 -> x1 / x2), !& "-" .>>. expression |> prec NEG => (fun x -> -x), !@ expression .>> "^" .>>. expression => (fun x1 x2 -> Math.Pow(x1, x2)), // We use |> asIs instead of => (fun x -> x). !& "(" .>>. expression .>> ")" |> asIs ) let opScope = OperatorScope( LeftAssociative("+", "-"), LeftAssociative("*", "/"), PrecedenceOnly(NEG), RightAssociative("^") ) DesigntimeFarkle.withOperatorScope opScope expression
Cílem je, aby se to podobalo následujícímu zápisu z Bisonu:
%left '-' '+' %left '*' '/' %precedence NEG %right '^' exp: NUM | exp '+' exp { $$ = $1 + $3; } | exp '-' exp { $$ = $1 - $3; } | exp '*' exp { $$ = $1 * $3; } | exp '/' exp { $$ = $1 / $3; } | '-' exp %prec NEG { $$ = -$2; } | exp '^' exp { $$ = pow ($1, $3); } | '(' exp ')' { $$ = $2; } ;