/******************************************************/ /* This program evaluates an arithmetic expression */ /* using recursion. It contains two procedures. GNT */ /* obtains the input expression consisting of separate*/ /* tokens, and EXP which performs the recursive */ /* evaluation of the tokens in the input line. */ /******************************************************/ expression: procedure options(main); declare sysin file, value float, token character(10) varying; on endfile(sysin) stop; on error(1) /* conversion or signal */ begin; put skip list('Invalid Input at ',token); get skip; goto restart; end; restart: do while('1'b); put skip(3) list('Type expression: '); value = exp(); put skip list('Value is:',value); end; gnt: procedure; get list(token); end gnt; exp: procedure returns(float binary) recursive; declare x float binary; call gnt(); if token = '(' then do; x = exp(); call gnt(); if token = '+' then x = x + exp(); else if token = '-' then x = x - exp(); else if token = '*' then x = x * exp(); else if token = '/' then x = x / exp(); else signal error(1); call gnt(); if token ^= ')' then signal error(1); end; else x = token; return(x); end exp; end expression;