I have written an Interpreter / Compiler simply as a programming algorithm using features such as recursive functions and concepts from finite-State machines. To me, these things are ideally suited to building a compiler (Although it does end up getting pretty complex).
Doing a little bit of research on the subject, I came across Flex/Bison. I'm wondering how these tools make it better to develop a compiler. Is is simpler to use that or is the end product better in some way?