Skip to content
tajmone edited this page Apr 13, 2018 · 2 revisions

Supporto per le grammatiche Polygen in Sublime Text 3.


Indice


Introduzione a Sublime-Polygen

Sublime-Polygen è un package gratuito per Sublime Text 3 che aggiunge il supporto per la sintassi delle grammatiche Polygen, funzionalità di editing mirate, e la possibilità di invocare Polygen dirattemente dall'editor per testare le grammatiche sorgenti con varie opzioni.

Grazie a questo package, è possibile beneficiare della potenza di Sublime Text per la creazione di grammatiche Polygen. Scrivere una grammatica non è mai stato così agevole.

Sublime-Polygen è stato creato da Tristano Ajmone, nel febbraio 2018, e pubblicato con licenza MIT.

Questa pagina del Wiki è stata concepita come versione italiana «ufficiale» della presentazione di Sublime-Polygen e le istruzioni su come installarlo, in alternativa alla documentazione ufficiale inglese. È comunque possibile che questa pagina non sia sempre aggiornata all'ultima versione di Sublime-Polygen, e che quindi non ne menzioni le ultime funzionalità aggiunte. Lo scopo della presente è di offrire un quadro generale del package Sublime-Polygen; per informazioni aggiornate e dettagliate si rimanda alla documentazione ufficiale inglese.

Sublime Text 3

Sublime Text è un noto programma commerciale, cross-platform, per l'editing di codice. Si tratta di un editor molto potente, performante e altamente personalizzabile, che è a tutti gli effetti un IDE (ambiente di sviluppo integrato) in grado di gestire progetti in molteplici linguaggi di programmazione e sviluppo.

Sublime Text si è guadagnato la fama di aver rivoluzionato il modo di scrivere codice grazie a funzionalità avanzate come cursori e selezioni multipli, la ricerca rapida tramite "fuzzy search", il Goto Anything, e altri potenti strumenti che ottimizzano il processo di scrittura e sviluppo del codice. Sebbene alcune di queste funzionalità non siano state inventate da Sublime Text, è comunque l'editor che le ha rese famose grazie al suo successo virale ed ad una loro implementazione snella e facilmente personalizzabile.

Tramite Package Control — il gestore di pacchetti integrato in Sublime Text — è possibile scaricare più di 4000 estensioni (supporto per linguaggi, colorazione di sintassi, temi, schemi di colore, plugin, ecc.) create dagli utenti di Sublime Text. Package Control vanta oltre 13 milioni di utenti.

Se non conscevate Sublime Text, questa può essere la vostra occasione per provarlo: è infatti possibile scaricare ed installare Sublime Text 3 per un periodo di prova indeterminato, senza restrizioni d'uso. Questa politica è finalizzata a concedere agli utenti il tempo utile per provare l'applicazione a fondo, senza le pressioni di un tempo limitato, prima di decidere se acquistare una licenza o meno.

Il costo di una licenza è di circa $80, una cifra più che ragionevole per un prodotto così versatile e ben realizzato. Certo, se non siete dei programmatori, il costo di una licenza solo per editare grammatiche Polygen potrebbe essere ingiustificato; ma tenete presente che Sublime Text viene utilizzato non solo per la scrittura di codice ma anche per l'editing di documenti (Markdown, ReST, ecc.) e siti Web (HTML, CSS, JavaScript, ecc.).

Comunque sia, vi consiglio di approfittare del periodo di prova e installare Sublime Text 3 per sperimentare di persona l'agilità con cui è possibile scrivere una grammatica Polygen con quest'editor ed il pacchetto Polygen. Se non avete sperimentato di persona la potenza delle selezioni multiple, la scrittura con cursori multipli, ed i benefici della fuzzy search, non potete apprezzarne gli enormi vantaggi — e, una volta provatili, nessun editor vi sembrerà com'era prima.

Per maggiori informazioni su Sublime Text, si rimanda alla lettura dell'articolo "Introduzione a Sublime Text 3", di Luca Pipolo.

Caratteristiche e Funzionalità

Una volta installato Sublime-Polygen, Sublime-Text riconoscerà automaticamente come grammatiche Polygen tutti file con estensione "*.grm", attivando per essi le funzionalità del pacchetto:

Colorazione della sintassi

Sublime Polygen introduce un solido supporto per la sintassi delle grammatiche Polygen, ed una colorazione della sintassi in grado di distinguerne i vari elementi:

  • simboli non terminali nella definizione di regole
  • simboli non terminali nelle produzioni
  • etichette
  • etichette in selezioni (isolate o di gruppo)
  • parole chiave (operatori)
  • operatori di probabilità
  • sequenze escape
  • sequenze escape Ascii
  • sequenze escape non valide
  • commenti

A ciascun elemento viene assegnato uno scope specifico e, in alcuni casi, uno scope secondario. Per esempio, tutti i simboli terminali condividono il medesimo scope specifico, ma ai simboli terminali di una definizione viene assegnato un'ulteriore scope al fine di poterlo evidenziare diversamente nelle colorazione della sintassi (solitamente, in grassetto). Lo stesso vale per le etichette al di fuori delle selezioni.

Gli scope aggiuntivi vengono altresì utilizzati dalla funzionalità Goto Symbol, al fine di indicizzare solo le definizioni dei simboli non terminali e le etichette all'interno di produzioni.

Temi Colore

Data la natura del Polygen Meta Language (PML), la sintassi impiega dei nomi di scoping personalizzati (ed arbitrari), rendendo necessario l'uso di temi dedicati per la colorazione della sintassi.

Sublime-Polygen viene distribuito con due color scheme:

  • "Polygen Glamour" (predefinito)
  • "Polygen Monokai"

Polygen Glamour

"Polygen Glamour" è il tema di colorazione sintattica predefinito. È un tema scuro con tonalità calde e una tavolozza di colori retrò.

Polygen Glamour

Polygen Monokai

"Polygen Monokai" è il tema alternativo, basato sullo schema "Monokai" (creato da Wimer Hazenberg) che è distribuito assieme a Sublime Text, riadattato alla sintassi di Polygen.

Polygen Monokai

Goto Symbol

Sublime Polygen implementa la funzionalità Goto Symbol per consentire di trovare rapidamente simboli non-terminali ed etichette all'interno di grammatiche lunghe. Vengono indicizzati solo i simboli non-terminali delle definizioni e le etichette al di fuori delle selezioni, e l'indicizzazione è limitata ai file sorgente individuali.

Questo dovrebbe rispecchiare lo scenario d'impiego tipico, dove l'utente desidera trovare rapidamente la regola in cui un simbolo non-terminale viene definito, oppure tutte le occorrenze di un'etichetta all'interno delle produzioni (ma non nei selettori).

Le funzioni "Goto Definition" e "Goto Reference" non sono supportate poiché le grammatiche vengono trattate isolatamente, di modo che la funzione Goto Symbol si limiti al contesto del file sorgente selezionato (ignorando le altre grammatiche aperte nell'editor, o all'interno del progetto).

Build Systems

Sublime Polygen offre vari sistemi di build e test, accessibili da qualsiasi grammatica sorgente tramite i menù Tools > Build e Tools > Build With… o le corrispettive scarciotoie di tastiera (Ctr B e Ctr Shift B).

Build Systems

Per usufruire delle funzonalità di Build è necessario che il programma Polygen sia presente nel PATH di sistema.

Il build system predefinito (Ctr B) invocherà Polygen per la grammatica sorgente aperta nell'editor, mostrando l'output nella console di Sublime Text.

Il menù "Build With…" (Ctr Shift B) mostrerà ulteriori scelte di build per la grammatica corrente:

  • Polygen
  • Polygen - verbose
  • Polygen - build to file (<filename>.out.txt)
  • Polygen - build to file verbose
  • Polygen - check grammar
  • Polygen - check grammar (pedantic)
  • Polygen - show grammar info
  • Polygen - preprocess
  • Polygen - preprocess to file (<filename>.pre.txt)

laddove, in assenza della specifica "to file", l'output di ciascuna operazione verrà mostrato nella console dell'editor. Le operazioni to file reindirizzeranno l'output di Polygen ad un file nella stessa cartella della grammatica sorgente, il cui nome verrà generato secondo la convenzione specificata tra parentesi nella descrizione del comando di build (es: <filename>.out.txt).

I vari build system disponibili rappresentano le tipiche operazioni di testing impiegate durante la scrittura di una grammatica, e consentono di eseguire questi test senza lasciare l'editor. Quando si lavora ad una grammatica molto grossa, che produce un output lungo, conviene utilizzare la versione to file dei vari build system: mantenendo aperto in Sublime Text il file di output, esso verrà aggiornato automaticamente ad ogni esecuzione del build, consentendo così di testare in tempo reale le produzioni di una grammatica.

Snippet

La funzionalità snippet di Sublime Text consente di accedere a dei template di codice preconfezionati tramite la digitazione di pochi caratteri (il nome dello snippet seguito dal tasto di tabulazione Tab).

Il pacchetto Sublime-Polygen aggiungerà degli snippet creati ad hoc per semplificare l'editing delle grammatiche Polygen. Questi snippet saranno disponibili solo all'interno dei file sorgenti di grammatica con estensione "*.grm".

Snippet Info Grammatica

L'Info snippet offre un rapido template per aggiungere ad una grammatica il blocco di descrizione:

Snippet Info Grammatica

Digitando "info"+Tab all'interno di un file "*.grm", verrà prodotto:

I ::=   "title:    \n"
      ^ "author:   \n"
      ^ "language: \n"
      ^ "status:   embryonic\n"
      ^ "topic:    \n"
      ^ "audience: \n"
      ^ "disclaim: \n"
      ^ "created:  DD/MM/YY\n"
;

… posizionando il cursore dopo il campo title, pronto ad accogliere la digitazione del valore per il campo; dopodiché sarà possibile navigare ai campi successivi tramite Tab.

Il simbolo non-terminale I è utilizzato da Polygen per fornire una stringa descrittiva della grammatica, tramite l'opzione -info da riga di comando. La stringa informativa non è soggetta ad un formato standard, si tratta più che altro di convenzioni adottate tra gli utenti del Polygen. Lo snippet info produce un template basato su quelle che sono le pratiche diffuse riscontrabili nella maggior parte delle grammatiche, e fornisce anche un valore predefinito per il campo "status" ("embryonic", lo status tipico delle grammatiche in fase di sviluppo) ed un promemoria del formato comunemente utilizzato per le date (DD/MM/YY) nel campo "created".

Si è liberi di aggiungere i propri campi personalizzati, e di omettere i campi che non interessano. È altresì possibile creare una copia del file "Polygen/snippets/info.sublime-snippet" in "Packages/User/" e adattarlo alle proprie esigenze (lo snippet modificato sostituirà quello predefinito).

Impiego di Variabili Personalizzate

Lo snippet info consente di impiegare variabili d'ambiente personalizzate come valori predefiniti per alcuni campi:

Variabili di Snippet Info

Le variabili supportate sono:

  • POLYGEN_AUTHOR
  • POLYGEN_LANG

Se una o più di queste variabili d'ambiente sono state definite, il loro valore verrà automaticamente usato per compilare i campi "author" e "language", rispettivamente.

Per definire le variabili, basta creare il file "Polygen_Env_Vars.tmPreferences" (il nome del file non è importante, solo l'estensione) in "Packages/User/", e definirle come in questo esempio:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>name</key>
    <string>Custom Polygen env vars</string>
    <key>scope</key>
    <string>source.polygen</string>
    <key>settings</key>
    <dict>
        <key>shellVariables</key>
        <array>
            <dict>
                <key>name</key>
                <string>POLYGEN_AUTHOR</string>
                <key>value</key>
                <string>Tristano</string>
            </dict>
            <dict>
                <key>name</key>
                <string>POLYGEN_LANG</string>
                <key>value</key>
                <string>Italian</string>
            </dict>
        </array>
    </dict>
</dict>
</plist>

Una volta creato questo file, lo snippet info compilerà automaticamente i campi "author" e "language" usando le vostre variabili personalizzate:

I ::=   "title:    \n"
      ^ "author:   Tristano\n"
      ^ "language: Italian\n"
      ^ "status:   embryonic\n"
      ^ "topic:    \n"
      ^ "audience: \n"
      ^ "disclaim: \n"
      ^ "created:  DD/MM/YY\n"
;

Questa personalizzazione consente un'ulteriore ottimizzazione dei tempi di creazione delle grammatiche, oltre che prevenire refusi.

Snippet per Simboli Non-Terminali

Lo snippet Non-Terminal è una conveniente scorciatoia per definire rapidamente simboli non terminali o il simbolo iniziale S.

Snippet per Simboli Non-Terminali

Digitando "nt"+Tab all'interno di un file "*.grm", verrà prodotto:

S ::=  ;

Lo snippet produce, di default, la definizione per il simbolo iniziale S, che è richiesto in ogni gramamtica. Puoi preservare il simbolo S e saltare direttamente alla definizione tramite TAB, oppure puoi prima sovrascrivere S con il nome del simbolo non-terminale desiderato.

Installazione

Il metodo d'installazione consigliato è tramite Package Control — direttamente dall'editor — poiché consente l'aggiornamento automatico di Sublime-Polygen a versioni future.

Requisiti di Sistema

Sublime-Polygen richiede Sublime Text 3 BUILD >=3149.

Le funzonalità Build System richiedono che il programma Polygen sia presente nel PATH di sistema.

NOTA — Attualmente (marzo 2018) Sublime-Polygen funziona solo sulle DEV BUILD di Sublime Text (ossia, le pre-release). Dalla prossima stable release in poi sarà possibile utilizzarlo anche con le versioni stable, ma fino ad allora solo chi ha installato le anteprime per sviluppatori può usufruirne.

Le DEV BUILD di Sublime Text sono riservate a utenti con la licenza, mentre le stable release possono essere utilizzate in prova (senza restrizioni di tempo né funzionalità) da chiunque.

I requisiti di versione minima sono dovuti al fatto che Sublime-Polygen utilizza un nuovo formato file introdotto in Sublime Text DEV BUILD 3149, mentre la più recente versione stable è la 3143 (settembre 2017).

Installazione via Package Control

Tramite menù, accedi a Preferences » Package Control : Install Package. Nel campo di ricerca digita "Polygen", ti verrà suggerito il pacchetto da installare, clicca e conferma.

L'installazione tramite Package Control garantisce che Sublime-Polygen sarà sempre aggiornato automaticamente.

Puoi visitare la pagina di Sublime-Polygen su Package Control:

Installazione Manuale

Dalla pagina delle release di Sublime-Polygen, su GitHub, è possibile scaricare il pacchetto nel formato *.sublime-package:

Si scarichi il file Polygen.sublime-package e lo si copi nella cartella dati dei pacchetti installati di Sublime Text 3:

<data_path>/Installed Packages/

Su Windows, il percorso della cartella è "%APPDATA%\Sublime Text 3\Installed Packages\".

Per maggiori informazioni sui percorsi di installazione dei pacchetti, si veda la documentazione ufficiale:

Si tenga presente che con l'installazione manuale il pacchetto non verrà aggiornato automaticamente: per passare a una versione aggiornata di Sublime-Polygen dovrete scaricare il file Polygen.sublime-package della nuova versione e sovrascrivere quello previamente installato.

Installazione Tramite Git

Questo metodo è sconsigliato.

Si crei la cartella "Polygen" in "<data_path>/Packages/", si apra la shell all'interno di "<data_path>/Packages/Polygen/" e si digiti:

git clone https://github.com/tajmone/sublime-polygen .

Non dimeticatevi il "." che segue l'URL del repository! non è un errore di battitura, serve a clonare i contenuti del progetto direttamente nella cartella, senza creare la cartella contenitore "sublime-polygen".

Per aggiornare il pacchetto così installato, sarà sufficiente aprire la shell nella cartella del pacchetto ed eseguire il comando:

git pull

Clone this wiki locally