Using a buffer structure allows me to pass more information to callers and a bit more discretion over how data is passed. Better error reporting via having a file handle and reporting it Emacs/GCC style.
Simple parser, took like an hour. Not very smart but at least it's like O(n).