I've attached an attempt toward a language file, but there are things I'd like to fix first.
First of all, \ is an escape character only in special cases: \n, \t, \e, and \", I think. Outside of strings it represents integer division. So in " \" " it should be interpreted as an escape (or else the string won't be terminated properly) and in 5\3 it must be interpreted as an operator (or else it will look for the non-existent escape "\3"). It doesn't really matter what happens to strings like " \p " but ideally these would be treated as either escapes or errors.
Second, I would like to limit category 2 and 3 keywords. Category 2 is for defaults, which appear only in the context "default(foo)" or "default(foo, bar)" (with optional spaces). Category 3 is types, which occur only after a colon following a variable. Any idea on how to code these? Oh, and it would be nice if strings containing *exactly* one of the types were highlighted: "t_INT" but not "t_ INT" or "type: t_INT". (The function type() returns a string in GP.)
Also, I'm not sure how GeSHi handles constants, but it's worth mentioning that GP accepts 1. as a t_REAL (floating-point constant) equal to 1.0, and similarly with .1 = 0.1.