Scrivere un parser CSS in C #. Quale pensi sia la migliore strategia?

2

Sto scrivendo un parser CSS in C #. Sono a buon punto, ma ho anche quei momenti in cui mi chiedo se sto prendendo l'approccio migliore. Le cose che ho considerato sono:

  1. Alimenta la grammatica CSS dal W3C in un generatore di parser e risolvilo.
  2. Codifica a mano un parser CSS dalla grammatica.
  3. Utilizza un tokenizzatore generato, ma codifica manualmente l'analisi delle produzioni.
  4. Il contrario di (3): genera le produzioni, ma codifica a mano il tokenizer.

Senza rivelare il mio approccio attuale, mi chiedevo come si sentissero gli altri a riguardo e apprezziamo i commenti e le indicazioni della tua esperienza. Parte di questo è anche vedere quali domande le persone chiedono e confrontare le domande con quello che mi sono chiesto.

    
posta Kevin Hsu 21.05.2011 - 08:23
fonte

3 risposte

5

Personalmente, penso che la grammatica sia abbastanza semplice da fare tutto a mano. A meno che il tuo progetto non stia già utilizzando un generatore di parser per qualcos'altro, sembra eccessivo per qualcosa di così piccolo.

L'altra cosa da tenere a mente è che un parser CSS conforme dovrebbe essere abbastanza indulgente alla sintassi ( e altri) errori , che renderebbero più difficile l'integrazione di un generatore di parser.

    
risposta data 21.05.2011 - 08:40
fonte
0

Ho convertito la grammatica CSS pubblicata in una sintassi che può essere gestita dal GOLD Parser .

Il mio ragionamento era che il mio utilizzo di un parser generato dalla macchina derivato dalla grammatica formale era il modo più probabile per ottenere una soluzione accurata e gestibile.

Sono contento del risultato.

Il difetto principale (su cui voglio lavorare successivamente) è il recupero degli errori (come menzionato da Dean Harding nella sua risposta): la mia attuale implementazione può solo analizzare il CSS corretto.

    
risposta data 21.08.2012 - 20:56
fonte
0

L'ho appena fatto e ho semplicemente scritto le dichiarazioni C # per elaborare le regole del CSS.

Il mio codice era molto semplice ma faceva ciò di cui avevo bisogno. Inizia spogliando tutti i commenti. Poi cerco il prossimo carattere { e presumo che i selettori siano arrivati prima e le dichiarazioni siano tra quel carattere e il prossimo carattere } .

Ho anche aggiunto un semplice supporto per la regola @media .

Il mio codice è stato pubblicato nell'articolo Un semplice parser CSS .

    
risposta data 27.08.2013 - 17:14
fonte

Leggi altre domande sui tag