Questo fa parte di una serie di domande che si concentrano sul progetto gemello del Progetto Abstraction, che mira a sottrarre i concetti utilizzati nella progettazione del linguaggio sotto forma di un quadro. Il progetto gemello si chiama OILexer, che mira a costruire un parser da file grammaticali, senza l'uso dell'iniezione di codice sulle partite.
Alcune altre pagine associate a queste domande, relative alla tipizzazione strutturale, possono essere visualizzate qui e facilità d'uso, trovate qui . Il meta-argomento associato a una richiesta di informazioni sul framework e il luogo adatto per la pubblicazione è disponibile qui .
Sto arrivando al punto in cui sto per iniziare a estrarre l'albero di analisi da una determinata grammatica, seguito da un parser di Discesa ricorsiva che utilizza DFA per discernere i percorsi in avanti (simile a LL (*) di ANTLR 4, quindi I ho pensato di aprirlo per ottenere informazioni.
In un compilatore parser, quali tipi di funzionalità sono ideali?
Finora ecco una breve panoramica di ciò che è implementato:
- Modelli
- Guarda avanti la previsione, sapendo cosa è valido in un determinato punto.
- Regola la "deliteralizzazione" prendendo i letterali all'interno delle regole e risolvendo da quale token provengono.
- Automi non deterministici
- Automi deterministici
- Semplice macchina a stati lessicali per il riconoscimento di token
- Metodi di automazione dei token:
- Scansione: utile per i commenti: Commento: = "/ *" Scansione ("* /");
- Sottrai - Utile per gli identificatori: Identificatore: = Sottrai (IdentifierBody, Parole chiave);
- Assicura che l'identificatore non accetta le parole chiave.
- Codifica: codifica un'automazione come conteggio serie X di transizioni N base.
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
- Fa una fuga unicode in esadecimale, con 4 transizioni esadecimali. La differenza tra questo e: [0-9A-Fa-f] {4} è che l'automazione risultante con Encode limita l'insieme consentito di valori esadecimali all'ambito di IdentifierCharNoEscape. Quindi se lo dai \ u005c, la versione della codifica non accetterà il valore. Cose come questa hanno un serio avvertimento: usare con parsimonia. L'automazione risultante potrebbe essere piuttosto complessa.
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
Ciò che non è implementato è la generazione CST, ho bisogno di regolare le automazioni deterministiche per riportare il contesto adeguato per farlo funzionare.
Per chiunque sia interessato, ho caricato una bella stampa della forma originale del progetto T * y♯ . Ogni file dovrebbe collegarsi ad ogni altro file, ho iniziato a collegare le singole regole per seguirli, ma ci sarebbe voluto troppo tempo (sarebbe stato più semplice automatizzare!)
Se è necessario più contesto, si prega di pubblicare di conseguenza.
Modifica 5-14-2013 : ho scritto codice per creare grafici GraphViz per le macchine a stati in una determinata lingua. Ecco un digraph GraphViz di AssemblyPart . I membri collegati nella descrizione della lingua dovrebbero avere un ruleename.txt nella loro cartella relativa con il digraph per quella regola. Parte della descrizione della lingua è cambiata da quando ho pubblicato l'esempio, ciò è dovuto alla semplificazione delle cose sulla grammatica. Ecco un'interessante immagine di graphviz .