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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top