Preferenza di progettazione grammatica per la ricorsione

0

Vorrei sapere se una delle due seguenti grammatiche equivalenti (poiché possono produrre le stesse regole) è preferibile (e perché).
Ad esempio la seconda grammatica è più concisa, ma è una buona cosa che nella seconda forma la regola b possa produrre ε o tali regole dovrebbero essere evitate.

G1:

a => X b Y
   | X Y

b => c b
   | c

G2:

a => X b Y

b => c b
   |
    
posta ibi0tux 06.10.2016 - 17:24
fonte

1 risposta

2

Dipende da cosa viene usata la grammatica.

Se è inteso per essere letto dagli esseri umani (ad esempio come parte di una specifica del linguaggio di programmazione), quindi utilizzare qualsiasi cosa sia più facile da capire. Probabilmente sarà più vicino al modo in cui gli utenti pensano alla sintassi della lingua possibile.

Se è pensato per essere usato da un generatore di parser, allora si applica il solito approccio alla scrittura del codice:

  1. La cosa più importante è correggere la grammatica. Ad esempio, alcuni generatori di parser non accettano tutti i CFG, ma solo un loro sottoinsieme.
  2. In secondo luogo, la tua grammatica dovrebbe essere facile da capire. Questo è in pratica lo stesso che per le grammatiche rivolte esclusivamente agli umani sopra.
  3. Infine, se il parser è troppo lento, usa l'opzione più efficiente con il parser generator che stai utilizzando.

Se stai usando la grammatica per altri scopi, o se ci sono considerazioni aggiuntive (ad esempio se stai estendendo una grammatica esistente, l'uniformità con la vecchia grammatica potrebbe essere importante), scegli in base a loro.

    
risposta data 06.10.2016 - 19:30
fonte

Leggi altre domande sui tag