Programming with Prolog can do weird things to your head, but it is fantastic for parsers: lex/yacc bend over!
Root
copyleft etc