C'è qualche terminologia ufficiale su qualcosa come le citazioni doppie "" Grammatica?
-
29-09-2020 - |
Domanda
In molte stringa di linguaggio programmazione è un token.
Ad esempio:
token ::= '"' string
| digit nat
string ::= char string
| '"'
nat ::= digit nat
| ϵ
.
Questa è una grammatica di ll (1) per la grammatica della toke di programmazione del linguaggio di programmazione.
Quando si analizza un string
, non è necessario controllare Set Set, poiché c'è un "
alla fine di ciascun string
.
Confrontando con nat
, string
è più facile da analizzare.
La mia domanda è
C'è qualche terminologia ufficiale su questo tipo di grammatica?
Grazie.
.
Modifica:
C'era un errore nella grammatica originale, grazie @RICI per aver sottolineato i miei errori.
Soluzione
I set di folllow non vengono utilizzati nel paradiso di string
o nat
. In entrambi i casi, il parser ha semplicemente bisogno di determinare se l'ingresso è in un insieme di simboli validi. Nel caso di nat
, i simboli validi sono cifre; Nel caso di string
, sono caratteri diversi dal "
. (In lingua reale, il parser avrebbe anche verificato per \
). Ma in entrambi i casi, è necessario un controllo, e non c'è un buon criterio per dire che un test è "più semplice" di un altro. (In pratica, entrambi i controlli sono probabilmente un semplice ricerca di tabella. Quindi sono o (1).)
Seguire i set sono necessari solo quando la grammatica contiene ε productions. Anche allora, le azioni del parser non sono complicate. Ciò che è più complicato sta costruendo il parser, qualcosa che succede solo una volta. Non è davvero così grande di un accordo, ma è sufficientemente notevole che le grammatiche senza "ε-free" siano una cosa. Non penso che ci sia un vocabolario comune per descrivere la differenza tra ripetizione esplicitamente e implicitamente terminata, e in qualsiasi modo la distinzione sarà molto difficile da definire rigorosamente. Il tuo string
verrebbe analizzato da un parser che ha utilizzato una regola diversa per raccogliere il "
finale, ed è abbastanza possibile che i due parser finiscano con la stessa implementazione.