package Ġfeature a . formula Ċ Ċ private Ġconst Ġval Ġoperator Symbols Ġ= Ġ"+ - */ < =>" Ċ Ċ fun ĠChar . is Operator Symbol () Ġ= Ġoperator Symbols . contains ( this ) Ċ Ċ val Ġoperator Map Ġ= Ġmap Of < String , Ġ() Ġ-> ĠFormula Operator < *, Ġ*, Ġ* >>( ĊĠĠĠ Ġ" +" Ġto Ġ{ ĠPlus () Ġ}, ĊĠĠĠ Ġ"-" Ġto Ġ{ ĠMin us () Ġ}, ĊĠĠĠ Ġ"*" Ġto Ġ{ ĠMultiply () Ġ}, ĊĠĠĠ Ġ"/" Ġto Ġ{ ĠDiv ide () Ġ}, ĊĠĠĠ Ġ" ==" Ġto Ġ{ ĠEqual () Ġ}, ĊĠĠĠ Ġ" >" Ġto Ġ{ ĠG reater () Ġ}, ĊĠĠĠ Ġ"> =" Ġto Ġ{ ĠG reater OrEqual () Ġ}, ĊĠĠĠ Ġ"< " Ġto Ġ{ ĠLess () Ġ}, ĊĠĠĠ Ġ"< =" Ġto Ġ{ ĠLess OrEqual () Ġ} Ċ ) Ċ Ċ private Ġval Ġoperator Priority Comparator Ġ= ĠComparator < Formula Operator < *, Ġ*, Ġ* >> Ġ{ Ġoperator 1 , Ġoperator 2 Ġ-> ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġoperator 1 :: class Ġ== Ġoperator 2 :: class Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ Ġoperator 1 . is Boolean Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ Ġoperator 1 . is Non Linear Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠ Ġoperator 1 . is Linear Ġ-> Ġif Ġ( operator 2 . is Boolean ) Ġ- 1 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror ("$ operator 1 , Ġ$ operator 2 ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠArrayList < Formula Operator < Any , ĠAny , ĠAny >> . sort Operators () Ġ{ ĊĠĠĠ Ġval Ġsorted Operators : ĠList < Formula Operator < Any , ĠAny , ĠAny >> Ġ= Ġsorted With ( operator Priority Comparator ) ĊĠĠĠ Ġclear () ĊĠĠĠ Ġadd All ( sorted Operators ) Ċ } Ċ Ċ private Ġval ĠFormula Operator < *, Ġ*, Ġ* >. is Boolean ĊĠĠĠ Ġget () Ġ= Ġthis Ġis ĠEqual Ġ|| Ġthis Ġis ĠLess Ġ|| Ġthis Ġis ĠLess OrEqual Ġ|| Ġthis Ġis ĠG reater Ġ|| Ġthis Ġis ĠG reater OrEqual Ċ Ċ private Ġval ĠFormula Operator < *, Ġ*, Ġ* >. is Linear ĊĠĠĠ Ġget () Ġ= Ġthis Ġis ĠPlus Ġ|| Ġthis Ġis ĠMin us Ċ Ċ private Ġval ĠFormula Operator < *, Ġ*, Ġ* >. is Non Linear ĊĠĠĠ Ġget () Ġ= Ġthis Ġis ĠMultiply Ġ|| Ġthis Ġis ĠDiv ide Ċ