Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Algoritmi - Linguaggio di Scripting e Interprete
Forum - Algoritmi - Linguaggio di Scripting e Interprete - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 13:54
Mercoledì, 19/08/2015
Position.vertex(rotate(sin(0.5), Position.getVertexX(), 0.7, Position.getVertexZ()) si, facilissimo da interpretare, che ci vuole?

PM Quote
Avatar
Bonnox (Member)
Pro


Messaggi: 85
Iscritto: 23/08/2014

Segnala al moderatore
Postato alle 21:16
Lunedì, 24/08/2015
messaggio da cancellare

Ultima modifica effettuata da Bonnox il 24/08/2015 alle 21:19
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 23:07
Lunedì, 24/08/2015
Non esattamente.... È pur sempre una soluzione... Non adatta in questo caso ma è una soluzione e il messaggio deve rimanere

PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 1:18
Martedì, 01/09/2015
Secondo me ti conviene utilizza un linguaggio come il LUA oppure usare una soluzione di visual programming come Blockly che ti permette di sostituire a un block un determinato codice nativo mi sembra perfetto per quello che vuoi fare tu solo che è visuale trovi qualche info qui : https://code.google.com/p/blockly/.
Nel caso in cui volessi proprio scrivere un tuo linguaggio un lexer per le istruzioni che hai scritto non è così complicato; se proprio vuoi fare una cosa banalissima formi un stringa unica la splitti secondo dei caratteri chiave e poi la passi al parser questo è a livello proprio basico in py:
Codice sorgente - presumibilmente Algoritmi

  1. source = "Position.vertex( rotate ( sin ( 0.5 ) , Position.getVertexX(), 0.7, Position.getVertexZ() )"
  2. token = re.split(' |\n|\t|,|;',source)
  3. print token


L' output è :
['Position.vertex(', 'rotate','(', 'sin','(','0.5', ')', '', '', 'Position.getVertexX()', '', '0.7', '', 'Position.getVertexZ(),')']
Ovio che l' user si puo dimenticare uno spazio prima o dopo una parentesi di conseguenza un lexer un po più serio o segnale o corregge automaticamente questi "errori" .
Invece il complicato è scrivere il parser ma con un po di buona volontà cela puoi fare se ti può servire ti linko i sorgenti di un linguaggio di programmazione interpretato che ho scritto : https://github.com/UZerbinati/Elyse/wiki
Comunque mettiamo che tu voglia lavorare in C ti suggerirei di scrivere il parser in modo che se incontra tra i token un nome uguale a quello di una funzione da te definita in un header o in una DLL ( in questo modo non devi ricompilare sempre il software )  esegue quella funzione.
Codice sorgente - presumibilmente C++

  1. typedef struct Module{
  2.    
  3.     void (*ptf)(char *filebuffer[]);
  4.     char name[100];
  5.    
  6. }Module;
  7. int load(int ID,char name[20],char function[20]){
  8.    
  9.     Modules[ID].ptf = function;
  10.     strcpy(Modules[ID].name,name);
  11.     if (Modules[ID].ptf != NULL){
  12.         return 0;
  13.     }
  14.     else{
  15.         return 1;
  16.     }
  17.    
  18. }
  19. int main () {
  20.         load(1,"echo",echo);
  21.         while(1){
  22.             if(strcmp(filebuffer[fb_index],Modules[FunctionIndex].name)== 0){
  23.                 break;
  24.             }
  25.             FunctionIndex++;
  26.             if(FunctionIndex == len(Modules){
  27.                
  28.                 FunctionIndex = 0;
  29.                 break;
  30.             }
  31.         }
  32.         ptf = Modules[FunctionIndex].ptf;
  33.         ptf ();
  34. }


Poi per essere un attimo puntigliosi più che un interprete mi sembra che tu voglia scrivere un compilatore , poichè vuoi tradurre in un codice nativo.
E per questo devi tenere bene a mente che il parser di un compilatore è molto  più difficile da stendere.

PM Quote
Avatar
Bonnox (Member)
Pro


Messaggi: 85
Iscritto: 23/08/2014

Segnala al moderatore
Postato alle 15:20
Domenica, 25/10/2015
grazie a tutti

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo