Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generazione template #20

Open
corzani opened this issue Dec 13, 2019 · 8 comments
Open

Generazione template #20

corzani opened this issue Dec 13, 2019 · 8 comments

Comments

@corzani
Copy link

corzani commented Dec 13, 2019

Questo non è propriamente un issue, è una feature proposal.
Sarebbe interessante se Polygen, in aggiunta al suo classico comportamento, potesse generare dei template come fa Closure Template di Google (Soy Template) in modo che possa essere usato facilmente in un contesto web.
Ovvero...

Data una grammatica in input tipo:

S ::= il Animale mangia Frutto ;
Animale ::= gatto | cane ;
Frutto ::= la mela | il mango ;

generare un file foo.js che possa essere utilizzato come:

const grammar = require('./foo.js')

console.log(grammar.get('S')) // Produce un output partendo dal simbolo S, ovvero "il gatto mangia la mela"
console.log(grammar.get('Animale')) // Produce "gatto" o "cane"
@tajmone
Copy link
Collaborator

tajmone commented Dec 13, 2019

Se ho capito bene, ti riferisci a questo progetto:

Premetto che non conosco Closure Templates, ma dal tuo esempio mi pare di capire che console.log(grammar.get('S')) implichi la generazione di grammatiche manipolabili tramite JavaScript.

Non posso certo rispondere a nome di Alvise, ma così ad occhio direi che esula dalle finalità di Polygen.

Il mio consiglio è quello di scrivere da zero un parser di grammatiche Polygen (in formato sorgente) e poi fornire un'interfaccia utente con le varie funzioni del caso (es. grammar.get('S')). Non dico che sia un compito facile (probabilmente non lo è affatto) ma lo iato tra OCaml e JavaScript è (a mio avviso) troppo grande da consentire una gestione come quella da te proposta.

D'altro canto, PML (Polygen Meta Language Spec 1.0) ovvero la specifica tecnica delle grammatiche Polygen, è di per sé "language-agnostic", concepita per poter essere implementata in diversi linguaggi.

@corzani
Copy link
Author

corzani commented Dec 13, 2019

Ciao Tristano,
capisco bene cosa intendi, è indubbiamente un'aggiunta che implica una quantità di cambiamenti non indifferente. La mia proposta nasceva dal fatto che un tool come Polygen sarebbe molto interessante lato web, dove a mio avviso, troverebbe il suo spazio ideale. Sono arrivato a questa pagina perchè cercavo un modo per trasformare codice OCaml in JS e sono finito nella issue #10

Per quel che riguarda l'issue di cui sopra, mi verrebbe da consigliarvi come alternativa... Kotlin, più che Scala. JetBrains ha fatto un buonissimo lavoro e con KotlinJS si può facilmente creare il corrispettivo Javascript. Quindi avere sia la parte su JVM che quella su JS in un unico code base.

Riguardo al tuo consiglio... anni fa dovetti testare un parser generator javascript e scrissi proprio delle regole per "parsare" la grammatica del Polygen che hai menzionato. Diciamo che il parser c'è... manca tutto il resto ;).

Grazie per la risposta.

@tajmone
Copy link
Collaborator

tajmone commented Dec 13, 2019

Quando fu creato questo repository, e Alvise decidette di rimettere mano ai sorgenti, non hai idea dei problemi che abbiamo dovuto affrontare per tentare di imbastire una toolchain OCaml su sistema operativo Windows. Nonostante la gloria passata di questo grande linguaggio (che io personalmente non conosco né ho usato, ma ne conosco le radici, ed essendo un fan di Rust sollevo il cappello a ML), oggi OCaml non è neanche più ufficialmente supportato per Windows.

Esistono versioni pseudo-ufficiali per Windows, ma per poterle usare godendo di un editor moderno è un vero incubo che richiede acrobazie con WSL per integrare plugin di editor che girano su Windows con applicazioni che girano su Linux (in WSL) usando Node.js come interfaccia (che è già tutto un dire, in fatto di sicurezza informatica, viste le falle di Node.js).

Alla fine io ho desistito a installarlo su Windows. L'idea originale era quella di poterlo compilare sbarazzandosi della dipendenza dalla DLL CygWin, ma il lavoro richiesto era troppo, specie per un linguaggio che non conosco.

Forse oggi sarebbe possibile ritentare, usando MSYS2, ma alla fine converebbe puntare su linguaggi più moderni come Haskell.

Comunque, mi sovviene che qualcuno sulla lista Polygen su Facebook abbia annunciato di aver realizzato un port di Polygen in PHP o JavaScript, non ricordo bene quale dei due, e da quel poco che ricordo (avendo sbirciato il progetto su GitHub) era quasi del tutto uguale a Polygen dal punto di vista della grammatica.

Se ti può interessare, cerco di recuperare quel link (so di averlo salvato sul PC) e te lo posto qui (dammi solo un po' di tempo).

@tajmone
Copy link
Collaborator

tajmone commented Dec 13, 2019

Ok @corzani, il link era a portata di mano tra i preferiti nel browser.

L'applicazione si chiama InstaGrammar, di Enrico Zeffiro, realizzata in JavaScript (è su Bitbucket, non su GitHub), disponibile anche tramite NPM:

Magari questo applicativo fa al caso tuo?

@corzani
Copy link
Author

corzani commented Dec 14, 2019

Perfetto, sei stato gentilissimo, grazie.

@alvisespano
Copy link
Owner

Grazie Tristano per aver risposto.

@tajmone
Copy link
Collaborator

tajmone commented Dec 19, 2019

Ci mancherebbe ... anche se non sono più riuscito ad essere presente nel progetto, cerco quantomeno di restare vigile.

L'interesse per PolyGen non tramonta mai! non credo ti "libererai mai" di PolyGen, ha lasciato un segno troppo marcato nella storia dell'informatica ed è destinato a far capolino nonostante le avversità dell'avvento di UTF-8, i mille problemi con la CygWin DLL, e quant'altro — nulla può arrestare la brama di chi vede nel PolyGen (l'unico, originale ed inimitabile) tutte le soluzioni ai problemi della propria esistenza.

D'altronde, in un'era in cui le nostre vite sono già state scritte a priori da statistiche e pianificazioni che mietono la creatività tanto di intere generazioni quanto dei singoli individui, quale altre via resta alla liberazione da tutti i mali se non affidarsi al caso ed al caos totali, e lasciare che essi siano la voce e l'oracolo della nostra vocazione repressa?! E quale strumento meglio di PolyGen è in grado di generare in maniera del tutto casuale le prescrizioni del nostro fato?

L'unica cosa che si potrebbe migliorare in PolyGen è aggiungere un'interfaccia che consenta l'uso di schede dedicate per la generazione casuale tramite seed entropici controllati da oscillatori al quarzo, come quelle usate nella crittografia militare. Allora saremo certi che i nostri oracoli saranno unici e irripetibili, sempre e comunque!

@alvisespano
Copy link
Owner

Sai che con me sfondi una porta aperta - anzi: un garage spalancato :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants