Una frase di permutazione è un'estensione delle definizioni grammaticali standard di contesto (E) BNF: una frase di permutazione contiene n produzioni (o equivalentemente, non terminali) da A 1 a A . Nella posizione della frase di permutazione, vorremmo vedere ognuna di queste produzioni esattamente una volta, ma non siamo interessati all'ordinamento di questi non terminali.
Per esempio:
S <- X { A, B, C } Y
è equivalente a:
S <- X A B C Y
S <- X A C B Y
S <- X B A C Y
S <- X B C A Y
S <- X C A B Y
S <- X C B A Y
Il concetto sembra essere stato introdotto in "Estensione di grammatiche senza contesto con frasi di permutazione" . Qui viene anche descritto come analizzare queste frasi in tempo lineare usando un parser LL (1).
La carta "Analisi delle frasi di permutazione" descrive un metodo per analizzare le frasi di permutazione usando combinatori di parser. Questi sono gli unici due articoli che ho trovato che parlano di frasi di permutazione e di come analizzarle.
Visto che possiamo facilmente analizzare questo tipo di frasi di permutazione con parser basati su LL (1), la mia ipotesi sarebbe che possiamo fare lo stesso con i parser in stile LR (1). La mia domanda è quindi:
Una grammatica contenente frasi di permutazione può essere analizzata in modo lineare nel tempo nella dimensione della stringa di input usando macchinari LR (1) mantenendo una tabella di dimensioni ragionevoli?
) codificando le frasi nella tabella LR: possiamo avere elementi LR che codificano quali produzioni devono ancora essere viste, e quindi ridurre l'esplosione a tutti i sottoinsiemi delle frasi di permutazione.
Anche se questo è meglio, ovviamente non è abbastanza buono - avere una frase di permutazione di 30 voci renderebbe inutilizzabile la grammatica. C'è ancora una parte dell'analisi LR che non abbiamo ancora toccato, e questa è la vera procedura basata sullo stack utilizzata per l'analisi. Immagino che la memorizzazione dei contatori nello stack possa essere in grado di risolvere il problema, ma non sono sicuro di come farlo.
Attualmente sto implementando un generatore di parser, e nel dominio del problema le frasi di permutazione sarebbero un dono del cielo. Mentre sto usando macchinari LR (1), la domanda di cui sopra è seguita.