parse() itself is a pretty straightfoward routine. Shouldn't be a problem there.
But, it calls blanks() and gch() ( I think that's what they're called )
Both of those routines have problems. Whoever wrote that code wasn't very careful
about their use of promotion from char to int....
Which is probably part of the seg fault error.
Put some printf()'s in the code; call fflush(stdout) after them so they get forced out.
If you can figure out how far it gets, you'll be able to find and probably fix the problem.
And check for an updated gcc version. There is a sequence of the 4.2 series that has problems.