There are two things that are easy to miss:
Path and CWD. The simplest way to ensure that the executable is found is to provide the absolute path to it, for example /usr/local/bin/lexparser.sh
Process output. You need to read the process output. The output is buffered and if the output buffer gets full the spawned process will hang.