Bueno, un compilador es mucho más que convertir código de C a ASM.
Debes pasar por varias fases:
-Análisis Léxico
-Análisis sintáctico (arbol sintáctico)
-Análisis semántico (Parser)
-Generar un código intermedio ( si usas libreiras, necesitas implementar un linker)
-Optimizar el código (asignación de punteros en memoria, bancos de memoria, recolector de basura, variables en tiempo real...)
-Generar un código objeto que sea aceptado por el ensamblador
Quizás sería más sencillo crear un pseudolenguaje interpretado dentro del PIC, al estilo de los Basic Stamp, o la otra opción sería crear un framework, con un lenguaje C propio pero que compilara sobre un compilador C de código abierto ( al estilo de Arduino sobre GCC), en el que lo importante sería cuidar la semántica y el parser, ya que el linkado, optimización y compilado de código objeto quedaría relegado a algo tipo GCC o SDCC.
El problema, es que los verdaderos compiladores de C para PIC, son propietarios (Hitec, MicroC, CCS, Micropic C) y no se pueden usar como compilación final.
Aún así, si quieres hacer algo decente, deberías crear los generadores léxico-sintáctico con FLEX y YACC que cumplen estándares POSIX y te permiten usar gramáticas formales y expresiones simples además de autómatas finitos para el lenguaje que vayas a crear.
Puedes encontrar unos cuantos generadores de analizadores sintácticos para YACC en internet para Common Lisp, Haskell... y hacerte una idea.
Salu2