Voglio creare un motore di template (ITT non un altro motore di template ...) basato su Razor.
Ci sono stato per parecchio tempo non arrivando da nessuna parte e francamente sono al limite. Ho provato a far girare il mio, ho provato a generare usando ANTLR e penso che ho bisogno di qualcuno che mi dica se devo mordere il proiettile e farlo nel modo più duro.
Per essere onesti, ho cercato di farlo nel modo più semplice possibile.
'@' indica l'inizio di una dichiarazione speciale. Una dichiarazione potrebbe essere:
- un identificatore di una variabile
- un identificatore di una chiamata di funzione. I parenti devono essere bilanciati e gestire le stringhe.
- l'inizio di uno dei costrutti logici di Java (if, for, while / do)
- una singola riga che produce un valore di uscita @ ()
- un blocco di istruzioni a più righe @ {}
La parte che mi sta uccidendo: tutto in {} viene trattato come codice UNLESS:
- è sfuggito con @ :. La linea è trattata come testo
- viene trovato un tag html. Tutto da quel punto in poi viene trattato come testo
Quindi, ora abbiamo problemi come "<" il token ora ha un contesto. Potrebbe essere LT o l'inizio di un tag HTML. Non aiuta neanche che un tag possa avere attributi, e ogni attributo potrebbe avere anche dichiarazioni speciali al loro interno. Poi, ho anche bisogno di bilanciare parentesi e virgolette.
C'è anche la complessità aggiuntiva della mancanza di sentinelle che terminano (diversamente da php, che ha tag).
Sembra impossibile analizzarli come codici alternati CODE - RAW - CODE - RAW, in modo che il risultato finale sia semplicemente la combinazione di pezzi di token in una classe Java e lasciare che il compilatore Java gestisca la sintassi. Sto per raddoppiare e reimplementare la grammatica Java e analizzare tutto. Qualcosa che non mi piace fare ...: (
In ogni caso, fammi sapere se ci sono modi più semplici per avvicinarti a questo, o come tenteresti di fare questo esercizio.
Saluti, Daryl