Analizza modelli in stile rasoio

0

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

    
posta Daryl Teo 06.02.2014 - 07:39
fonte

0 risposte

Leggi altre domande sui tag