Esiste un programma più moderno di lex o yacc, che non richiede JVM? [chiuso]

6

Esiste un equivalente "moderno" di bisonti e flessioni che non richiede JVM o .NET o simili "pesanti" runtime?

Per moderno, intendo ad esempio Antlr e un altro in Java ho visto ma ho dimenticato il nome di. (So che ad esempio Antlr ha un target C, ma sto giocando con l'idea di incorporare il del compilatore nel mio programma e Java sarebbe molto poco pratico per me.)

    
posta Prof. Falken 20.05.2012 - 18:24
fonte

3 risposte

17

Raccomando di utilizzare il generatore di parser di limone per l'analisi. Come Bison, produce un parser in C. Tuttavia, la sua grammatica è meno soggetta a errori, l'interfaccia di analisi è rientrante senza variabili globali, e funziona assegnando token al parser (invece del parser che ti chiama per ottenere token) .

Non hai davvero bisogno di un generatore di lexer (ad es. lex). Di solito è più facile scriverlo a mano.

Puoi controllare parte del mio codice per avere un'idea di come analizzare una lingua usando Lemon: lingua , lexer , grammar , parser .

    
risposta data 20.05.2012 - 21:22
fonte
3

Una risposta molto diversa ma abbastanza capace (e facilmente integrabile) è LPEG .

A prima vista è solo una libreria di pattern matching, come una RegEx più capace; ma ti consente di definire non solo schemi ma grammatiche intere, associando il comportamento personalizzato a qualsiasi passaggio.

In quella pagina c'è un campione che corrisponde a un'espressione aritmetica e produce il valore finale. Potrebbe invece produrre un grafico di analisi o emettere direttamente il codice.

La pagina LPEG Recipes include esempi per l'intero lexer e parser Lua e anche un lexer ANSI C.

    
risposta data 21.05.2012 - 18:52
fonte
1

Nonostante Ambroz Bizjak ti avesse detto che non avresti davvero bisogno di un generatore di lexer, molto probabilmente lo farai (a meno che tu non stia bene con il dover modificare manualmente le regole dei token). Ti consiglierei di utilizzare Ragel al posto del vecchio lex se vuoi ottenere un simpatico lexer senza stato globale.

    
risposta data 08.11.2017 - 16:14
fonte

Leggi altre domande sui tag