Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Projets » Compilateur/Translateur TI-Basic -> C (78 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
limmt Ecrit le: Mardi 15 novembre 2005 à 00:21 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


Voila je vous présente mon nouveua projet, un compilateuur/traducteur qui transforme du TI-basic en un projet TIGCC, basc89.
Le logiciel sera en mode console (windows pour l'instant) donc aucun screenshot ne peut servir, mais je vous mets un exemple de code qui arrive à être traduit et compilé avec TIGCC ;):


Prgm
§(2)»x
0»z
ClrDraw
PxlText "Test de TI-Basic",1,1
If x=§(2) Then
PxlText "Si x vaut racine de 2",20,1
EndIf
For x,1,10
PxlText "H",x*5,1
If x=5 Then
PxlText "Héhé c'est à 5",70,70
EndIf
EndFor
Pause
ClrDraw
For z,0,160
PxlOn 40+z/3,z
EndFor
Pause
EndPrgm


(a savoir que § est le code utilisé par TI-Graph Link pour la racine carrée et » est le code de la touche [STO])

Ceci étant transformé en:

// Code source C
// Créé par basc89, Limmt Ribeman © 2005

#include <tigcclib.h>

short x=0;
short z=0;

void _main (void)
{
  x=sqrt(2);
  z=0;
  clrscr();
  DrawStr(1,1,"Test de TI-Basic",A_REPLACE);
  if(x==sqrt(2))
  {
    DrawStr(1,20,"Si x vaut racine de 2",A_REPLACE);
  }
  for(x=1;x<10;x++)
  {
    DrawStr((1,(short)(x*5),"H",A_REPLACE);
    if(x==5)
    {
      DrawStr(70,70,"Héhé c'est à 5",A_REPLACE);
    }
  }
  ngetchx();
  clrscr();
  for(z=0;z<160;z++)
  {
    DrawPix(z,(short)(40+z/3),A_NORMAL);
  }
  ngetchx();
}

-Edité le Mardi 15 novembre 2005 à 00:24 par limmt-
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°1   Marquer comme non lu.
mic Ecrit le: Mardi 15 novembre 2005 à 00:30 Déconnecté(e)    Voir le profil de mic Envoyer un email à mic Visiter le site WEB de mic Envoyer un message privé à mic  

excellent !!!

Je vais pouvoir transposer mon Ephy en C :)

MAis ca marchera avec nimporte quel programme BASIC ?

Ca sera 100 % fiable ??
-Edité le Mardi 15 novembre 2005 à 00:31 par Mic-
TI-BANK :
http://www.ti-bank.be
http://pagesperso.laposte.net/bankti
http://www.ti-bank.fr.tc

Forum TI-BANK :
http://tibank.forumactif.com
    
./Post n°2   Marquer comme non lu.
limmt Ecrit le: Mardi 15 novembre 2005 à 00:32 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


Alors non ca ne sera pas à 100% fiable masi ca devrait marcher à terme avec tout programme en basic, meme avec des sous programmes ;)
Les indirections ne seront probablement pas supportées et peut être d'autres choses encore ;)
Mais je vasi essayer que ca soit el plus compelt possible ;)
-Edité le Mardi 15 novembre 2005 à 00:32 par limmt-
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°3   Marquer comme non lu.
mic Ecrit le: Mardi 15 novembre 2005 à 00:35 Déconnecté(e)    Voir le profil de mic Envoyer un email à mic Visiter le site WEB de mic Envoyer un message privé à mic  

Le problème c'est qu'il suffit d'un bug pour que le programme ne marche pas.

Et si le programme BASIC est assoicé à des images et des matrices, le programme en C va tout intégrer ??
TI-BANK :
http://www.ti-bank.be
http://pagesperso.laposte.net/bankti
http://www.ti-bank.fr.tc

Forum TI-BANK :
http://tibank.forumactif.com
    
./Post n°4   Marquer comme non lu.
limmt Ecrit le: Mardi 15 novembre 2005 à 00:38 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


Pour le bug, il est toujours corrigeable sur le source en C :D
Attention: Il n'y a PAS de vérification syntaxique
Les matrices seront asociées à des matrices C et les images à des tableaux pour faire un sprite ;)
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°5   Marquer comme non lu.
mic Ecrit le: Mardi 15 novembre 2005 à 00:38 Déconnecté(e)    Voir le profil de mic Envoyer un email à mic Visiter le site WEB de mic Envoyer un message privé à mic  

:)
TI-BANK :
http://www.ti-bank.be
http://pagesperso.laposte.net/bankti
http://www.ti-bank.fr.tc

Forum TI-BANK :
http://tibank.forumactif.com
    
./Post n°6   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 15 novembre 2005 à 06:30 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


mic :
Je vais pouvoir transposer mon Ephy en C :)

Ça m'étonnerait...

MAis ca marchera avec nimporte quel programme BASIC ?

Non.

Ca sera 100 % fiable ??

Carrément pas.

limmt :
Alors non ca ne sera pas à 100% fiable masi ca devrait marcher à terme avec tout programme en basic, meme avec des sous programmes ;)

Si ce n'est pas 100% fiable, ça veut dire que ça ne marche pas avec tout programme. #roll#

Les indirections ne seront probablement pas supportées et peut être d'autres choses encore ;)

Calcul formel... L'essence du TI-BASIC 68k quoi. #roll#

Le TI-BASIC accepte même ça:
For i,sqrt(2),5*sqrt(2),sqrt(2):Disp string(i):EndFor
Il affiche les racines en formel!
Donc même une simple boucle For devra passer par la pile d'expressions, voire par des entrées VAT comme dans le vrai BASIC. Le résultat, c'est que ça donnera des programmes qui gagneront peu ou pas en vitesse et deviennent nettement plus gros (parce que les manipulations de pile d'expression et tout prennent leur place). L'alternative, c'est de ne pas gérer tout ça, auquel point le langage que tu compiles n'est plus du TI-BASIC (bref, tu es en train de faire un autre ETP: essentiellement du C avec une syntaxe BASIC).

Déjà ton simple programme exemple est bogué, tu essaies de stocker la racine de 2 dans un entier. #roll# (Le simple fait que tu utilises des entiers pour tes variables montre que ce n'est pas du TI-BASIC.) Pour que ton truc soit utilisable, tu devras rajouter des déclarations de variable, auquel point le langage que tu compiles n'est carrément plus du TI-BASIC (même pas un sous-ensemble).

Le TI-BASIC n'est pas du tout fait pour être compilé, c'est impossible à compiler correctement.
-Edité le Mardi 15 novembre 2005 à 06:31 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°7   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 15 novembre 2005 à 06:33 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Ce qui m'énerve, c'est qu'à chaque fois j'explique ça, et à chaque fois il y a des boulets pour essayer quand-même (et se planter lamentablement quand ils essaient de compiler autre chose qu'un Hello World, parce qu'ils se rendent compte des problèmes que je viens de citer). #roll#
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°8   Marquer comme non lu.
Benjy Ecrit le: Mardi 15 novembre 2005 à 07:28 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


Non mais le programme de limmt peut etre interessant il transforme le basic en c que ca soit bien fait ou pas, il suffit apres de relir le code c et de le corriger un peu si necessaire. Mais ca peut etre interessant quand meme!!
Le langage C y'a pas mieux!!!
    
./Post n°9   Marquer comme non lu.
FpgForce Ecrit le: Mardi 15 novembre 2005 à 07:46 Déconnecté(e)    Voir le profil de FpgForce Envoyer un email à FpgForce Envoyer un message privé à FpgForce  

Tu n'as pas compris Benjy, il n'y a aucun interet de faire ça, autant coder toi même directement en C.
Ça ressemble plus à remplaceur mot à mot qu'à un réel convertisseur, mais comme l'a dit Kevin un convertisseur ne servirait à rien, on ne gagnerait pas en vitesse.
    
./Post n°10   Marquer comme non lu.
Thor Ecrit le: Mardi 15 novembre 2005 à 08:44 Déconnecté(e)    Voir le profil de Thor Envoyer un email à Thor Visiter le site WEB de Thor Envoyer un message privé à Thor  


Oui je suis désolé pour limmt mais cela n'est vraiment pas propre! Le Ti-Basic et le C n'ont pas la même syntaxe. Tu ne fera que sortir un code sale et non-optimiser pour le C. Je suis par contre tout à fait d'accord que tu touchera beaucoup de programmeur Ti-Basic avec un tel programme mais ne vaut'il pas mieux privilégié la propreté et la qualité à la facilité?
Cyril MOTTIER aka {==Thor==}
Modérateur général du forum de Tigen
[Etudiant à l'Institut National des Sciences Appliquées (INSA) de Rennes]
Mon site perso c'est ici
    
./Post n°11   Marquer comme non lu.
limmt Ecrit le: Mardi 15 novembre 2005 à 08:57 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


Le but n'a jamais été d'être propre lol
J'ai rajouté une détection automatique du type:

Prgm
§(2)»x
0»z
ClrDraw
PxlText "Test de TI-Basic",1,1
If x=§(2) Then
PxlText "Si x vaut racine de 2",20,1
ElseIf x=4 Then
PxlText "Si x vaut 4",20,1
Else
PxlText "Que vaut donc x?",20,1
EndIf
For x,1,10
PxlText "H",x*5,1
If x=5 Then
PxlText "Héhé c'est à 5",70,70
EndIf
EndFor
Pause
ClrDraw
For z,0,160
PxlOn 40+z/3,z
EndFor
3»z
Pause
EndPrgm


est transformé en:

// Code source C
// Créé par basc89, Limmt Ribeman © 2005

#include <tigcclib.h>

float x=0;
short z=0;

void _main (void)
{
  x=sqrt(2);
  z=0;
  clrscr();
  DrawStr(1,1,"Test de TI-Basic",A_REPLACE);
  if(x==sqrt(2))
  {
    DrawStr(1,20,"Si x vaut racine de 2",A_REPLACE);
  }
  else if(x==4)
  {
    DrawStr(1,20,"Si x vaut 4",A_REPLACE);
  }
  else
  {
    DrawStr(1,20,"Que vaut donc x?",A_REPLACE);
  }
  for(x=1;x<10;x++)
  {
    DrawStr(1,(short)(x*5),"H",A_REPLACE);
    if(x==5)
    {
      DrawStr(70,70,"Héhé c'est à 5",A_REPLACE);
    }
  }
  ngetchx();
  clrscr();
  for(z=0;z<160;z++)
  {
    DrawPix((short)(z),(short)(40+z/3),A_NORMAL);
  }
  z=3;
  ngetchx();
}
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°12   Marquer comme non lu.
LionelA Ecrit le: Mardi 15 novembre 2005 à 12:08 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


à mon avis c'est pas mal pour limmt pour apprendre mais ca se limite a ca et c'est déjà pas mal :)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°13   Marquer comme non lu.
Onur Ecrit le: Mardi 15 novembre 2005 à 14:17 Déconnecté(e)    Voir le profil de Onur Envoyer un email à Onur Visiter le site WEB de Onur Envoyer un message privé à Onur  


Thor > on s'en fout que le code produit ne soit pas propre, tant que les programmeurs TI-Basic pourront traduire leur programme en quelque chose de compilé, ils seront content. Mais... oui il y a un "mais" :D... ils ne pourront pas :)

Pourquoi? Parce que. Pour toutes les raisons que Kevin a cité.

Même un translateur sans indirection ne sera pas possible sans vérification syntaxique.
Limmt dit qu'il n'y a pas de vérification syntaxique. Ca me semble très mal parti. Parce que si tu veux pouvoir déclarer des variables TI-BAsic (dont on ne connait pas le type comme l'a rappelé kevin) en les considérant comme des int parce que le programme de départ ne les utilise que comme des entier, il faut que tu puisse vérifier que c'est le cas, d'ou analyse syntaxique, donc ----> voila. Enfin, continue un peu et tu t'en rendras compte par toi meme.
Je ne veux pas faire quelque chose de bien, je cherche l'excellence:ETP Studio...


et autres projets à finir avant 2010
    
./Post n°14   Marquer comme non lu.
Folco Ecrit le: Mardi 15 novembre 2005 à 14:45 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


une variable basic peut en plus changer de type en cours de prog :D
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°15   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 15 novembre 2005 à 15:04 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


limmt :
J'ai rajouté une détection automatique du type:

Tiens, maintenant ton "TI-BASIC" devient du CAML. :D

Ça ne va pas vraiment arranger les choses, le BASIC est non-typé, ton détecteur va avoir des problèmes si on lui donne du:
2^(1/2)->i
...
""->i


Et tiens, pour une fois l'équipe de ETP (le développeur et l'hébergeur) est d'accord avec moi. ;)
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°16   Marquer comme non lu.
mic Ecrit le: Mardi 15 novembre 2005 à 17:12 Déconnecté(e)    Voir le profil de mic Envoyer un email à mic Visiter le site WEB de mic Envoyer un message privé à mic  

Moi je trouve ça trop bien même si le code sorti n'est pas propre, on peut tjs le corriger après. Au moins on aura le structure globale du programme en C, c'est déjà énorme :)
-Edité le Mardi 15 novembre 2005 à 17:13 par Mic-
TI-BANK :
http://www.ti-bank.be
http://pagesperso.laposte.net/bankti
http://www.ti-bank.fr.tc

Forum TI-BANK :
http://tibank.forumactif.com
    
./Post n°17   Marquer comme non lu.
limmt Ecrit le: Mardi 15 novembre 2005 à 18:52 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  



2^(1/2)->i
...
""->i


Alors si il voit ca, il détecte d'abord du float puis une chaine de caractère, donc la variable sera déclarée dans un type Varient, qui consistera en un char définissant le type actuel et 4 octets définissant le contenu (long, float, pointeur vers une string, pointeur vers une liste).
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°18   Marquer comme non lu.
FpgForce Ecrit le: Mardi 15 novembre 2005 à 19:05 Déconnecté(e)    Voir le profil de FpgForce Envoyer un email à FpgForce Envoyer un message privé à FpgForce  

Et tiens, pour une fois l'équipe de ETP (le développeur et l'hébergeur) est d'accord avec moi. ;)
Hebergeur et webmaster hein :D (mais sinon c'est pas la première fois qu'on est d'accord :) )
    
./Post n°19   Marquer comme non lu.
limmt Ecrit le: Mardi 15 novembre 2005 à 20:26 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


J'ai ajouté une partie de la gestion des chaines:

Prgm
"Test"&" de chaine de caractères"»vars
ClrDraw
PxlText vars,1,1
Pause
EndPrgm


devient


// Code source C
// Créé par basc89, Limmt Ribeman © 2005

#include <tigcclib.h>

char *strbuf=NULL;
char *strbuf2=NULL;
char *strs=NULL;
char *vars=NULL;

void _main (void)
{
  if(strbuf) free(strbuf);
  strbuf=malloc(8);
  strcpy(strbuf,"chaines");
  strbuf2=malloc(strlen(strbuf)+9);
  strcpy(strbuf2,strbuf);
  strcat(strbuf2," de cars");
  free(strbuf);
  strbuf=strbuf2;
  vars=malloc(strlen(strbuf)+1);
  strcpy(vars,strbuf);
  clrscr();
  DrawStr(1,1,vars,A_REPLACE);
  ngetchx();
  end:
  free(strbuf);
  free(vars);
}

-Edité le Mardi 15 novembre 2005 à 21:23 par limmt-
-Edité le Mardi 15 novembre 2005 à 21:27 par limmt-
-Edité le Mardi 15 novembre 2005 à 21:27 par limmt-
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
  :: Index » Forum Ti68K » Projets » Compilateur/Translateur TI-Basic -> C (78 réponse(s))
Pages : 1/5     « [1] 2 3 4 5 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 63.97ms avec 18 requetes