Я когда то писал простенький компилятор подмножества Си, очень близкий к SmallC. В нем у меня было все просто - тип мог быть либо char, либо int, либо указателем на эти типы/массивом. Теперь же, мне нужно реализовать все так, как это реализовано в C89. Т.е. должны парсится такие выражения:
char *(*(**foo[][8])())[];