#!/usr/bin/env ground @begin stdout "Calculation: " stdin &calc getstrsize $calc &calcsize set &counter 0 set &left "" set &right "" set &operator ' ' set &isRight false ## Preprocessing # Loop to parse input @loopstart getstrcharat $calc $counter &char # Remove any spaces (they're inconvenient) equal $char ' ' &cond if $cond %doneif # Check for operators # '+' operator inequal '+' $char &cond if $cond %minusOpCheck set &operator $char set &isRight true jump %doneif @minusOpCheck # '-' operator inequal '-' $char &cond if $cond %multiplyOpCheck set &operator $char set &isRight true jump %doneif @multiplyOpCheck # '*' operator inequal '*' $char &cond if $cond %divideOpCheck set &operator $char set &isRight true jump %doneif @divideOpCheck # '/' operator inequal '/' $char &cond if $cond %endOpChecks set &operator $char set &isRight true jump %doneif @endOpChecks if $isRight %isRight add $left $char &left jump %doneif @isRight add $right $char &right @doneif add 1 $counter &counter inequal $counter $calcsize &cond if $cond %loopstart # End loop ## Computing # Convert types stod $left &left stod $right &right # Calculations # Adding inequal $operator '+' &cond if $cond %subtract add $left $right &result stdlnout $result jump %begin # Subtracting @subtract inequal $operator '-' &cond if $cond %multiply subtract $left $right &result stdlnout $result jump %begin # Multiplying @multiply inequal $operator '*' &cond if $cond %divide multiply $left $right &result stdlnout $result jump %begin # Dividing @divide inequal $operator '/' &cond if $cond %error divide $left $right &result stdlnout $result jump %begin @error stdlnout "Uh oh something terribly terrible happened lmao" jump %begin