/************************************************************************ * balpar -- copy a balanced paren string * ************************************************************************/ subroutine balpar include ratfor.def integer gettok character t,token(MAXTOKEN) integer nlpar if(gettok(token) ^= LEXLPAREN) [ call synerr(S_MIS_LPAREN) return ] call outstr(token) #write out the left paren nlpar=1 #keeping track of parens repeat [ i = gettok(token) if(i == LEXSEMICOL \ i == LEXBEGIN \ i == LEXEND \ i == EOF) [ call pbstr(token) call synerr(S_UNBAL_PARENS) return ] if(i == NEWLINE) token(1) = EOS #force null output, ignore newlines else if(i == LEXLPAREN) nlpar = nlpar + 1 else if(i == LEXRPAREN) nlpar = nlpar - 1 call outstr(token) #write out string ] until (nlpar <= 0) if(nlpar ^= 0) call synerr(S_MIS_PAREN) return end