60

Topic is : "MyLiB : Une Librairie qui court-circuite le TIOS".

61

oui, et ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

62

et l'un comme l'autre, c'était votre dernier post sur cette lancée.
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

63

C'est dommage. Parfois une digression peut être riche.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

64

d'où l'interet de créer un nouveau topic, pour que ceux qui veulent y participer puisse le trouver facilement au lieu de supposer que ça se trouve là où le titre ne l'indique pas du tout.

(cela dit vu qu'ici andoh_wilfried ne se gène pas pour remonter son topic 10 fois d'affilée, on peut supposer que le sujet initial interesse peu de monde)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

65

Comme vous l'avez si bien dit , cela ne ressemble plus à la Librairie que j'avais prévu au départ.
C'est vraiment parti pour un interpreteur presque Basic.

Disons que pour l'instant je n'ai pas cette prétention mais je mentirai si je dis n'y avoir pas
songé. Ce qui me fait cruellement défaut c'est un parser d'expression.
Si je dois m'y ateler ce sera en dernier.

Pour le moment, il est dommage de limiter les types de Variable aux seuls Types ENTIER , CHAINE.
Mais c'est très facile à supprimer comme limitation.

L'idée de refaire un Interpreteur TI basic est somme toute séduisante.
Mais ça va demander énormément de boulot.

En Fait ce Que j'avais à l'esprit c'est utiliser du code TI Basic à au Beau Milieu de MyLiB.
Va donc Falloir Faire :

- un Tokénéiseur de code Reconnaissant les 2 Codes pour les traiter différemment
- pour cela, j'inclurai un délimiteur de code Ti-Basic

66

j'ai un peu remanier mon code pour y voir plus claire.
Il n'y a que les Entiers et les Chaines qui sont supportées.

C'étais à la base une Librairie pour aider à faire quelques petits Utilitaires.

Je vais implémenter les Structures de contrôle pour en finir.
Je crois que je vais m'arrêter là et Sortir une Betâ pour ceux qui voudraient essayer.
C'est un projet que j'ai entamer dans le but uniquement d'apprendre le C.

Je n'avais pas l'intention de faire un autre Basic mais uniquement une Librairie.
De Plus je n'en ai pas encore les compétences.
Surement que celà viendra.

En effet je vais Commencer un Analyseur d'Expression.
Si il fini un jour je penserai à l'intégré dans cette Librairie.

_______________________________________________________________________
GeoGeo :
Pour les For, j'ai effectivement stocké les paramètres dans une structure.

Mon véritable problème est qu'au départ je n'avais pas songé à faire un truc tokénéisé.
Ce qui fait que pour les Label-Goto, For-Next, Do-While .... La recherche et le référencement se
fait pendant l'exécution du code.
Mauvaise méthode me repondrez vous !
Faut donc que je revois cela.

Je suppose donc que je dois créer un data contenant les offset des structures de controle et le sauver dans le fichier tokénéisé.

Un autre problème c'est que j'utilise un Switch case pour l'exécution des différentes fonctions.

C'est vraiement lourd. J'ai essayer une fois de faire des fonctions séparées mais cela a alourdi fortement la taille de MyLib des quelques Ko.

Pour ce qui est de la Vitesse je ne sais pas si cela va baisser si j'utilise des pointeurs sur fonction à la place des Switch Case.

67

Finallement , Après un lourd remaniement du code de la librairie, il ne reste qu'un pas à faire :
Ajouter la La Gestion des nombres Décimaux.
Je reféchis serieusement à la façon d'utiliser simultanément les 2 types (ENTIER et DECIMAUX) comme argument
d'une même fonction.

68

Ouf, j'ai enfin fini cette librairie ! rotfl
Des détails sur les caractéristiques de MyLiB pour sa première Betâ-privée
sont au 3 premiers POST du sujet.

Il ne me reste plus qu'à reprogrammer les utilitaires les plus utiisés pour la Betâ officielle :
- popup multi-listes
- menu ToolBar
- Editeur de Sprites en 3 NVG
- Editeur de MAPE au format MYLB
- HexaViewer
- InputStr
- Explorateur de fichiers
- Editeur de Texte (peut-être)

69

Voilà , c'est la 1ere Betâ de MyLiB, RDV au Post n°0

70

71

Voilà c'est rectifié !

Il faut dire que ça fait 35 Ko.
Quand je pense qu'il reste encore le Pretty Print.

72

Tu veux dire l'affichage d'une expression en pretty print? (avec ou sans scrolling?)

73

Avec scrolling , je pense.
Mais actuellement , mon soucis c'est l'évaluateur d'expression que j'entamé il y a 2 jours.
j'ai écris un convertisseur d'expression algébrique en RPN, mais pour l'éxécution c'est pas terrible.
La rapidité m'inquiète un peu.
Je cherche d'autres méthodes de conversion d'expression algébriques.
Si vous avez des suggestions c'est ici qu'il faut poster.

74

Bonjour, suite au remarque, j'ai commencé il ya 2 jours de cela l'écriture d'un parser d'expression pour MyLib. ça avance pas mal.
Je viens de finir la conversion RPN des expressions algébriques.
Mais vu que je trouve que l'interpretation n'est pas terrible, ( car je n'arrive à interprèté sans faire des recopies des arguments de l'expression RPN dans la pile )

, j'ai donc converti le RPN pour faire ceci :
(5-c)*(a+c)/x

RPN ->
c 5 - * c a + x /

MyLiB -> (le # retire le dernier argument déposé sur la pile).
l'exécution commence par le bas en remontant . le résultat est laissé sur la Pile
# # *
c a +
x # /
c 5 -

Si quelqu'un peut proposer une méthode pour le RPN qui évite de recopier des portions de l'expression je suis preneur.


75

Ta conversion est incorrecte, c'est "5 c - a c + * x /" qu'il faut obtenir.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

76

Pourquoi tu ne fais pas une autre pile à base de pointeurs ou de TAGs?
Ensuite soit tu utilises un algo à base d'arbre pour faire ta conversion RPN soit tu utilises une autre petite pile qui s'occupe de stocker les opérateurs et suivant les priorités les restituent comment il faut! Dans mon cas j'ai 3 piles, la pile avec les TAG sous la forme non RPN, une pile temporaire d'opérateurs nommée pile voie de garage et ensuite la pile finale en RPN.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

77


Sasume
:

Voici ce que donne l'algo pour le Parser en 7 Ko (sans gestion des erreur pour le moment )

Algebrique
( 5 - c ) ( a + c ) / x

RPN
x c a + / c 5 - *

MYLIB
# # *
c 5 -
x # /
c a +
# représente le résultat du dernier calcul
MYLIB fait donc : Addition, division, Soustraction puis Multiplication


Pas de doute RPN donne un code plus Compact.
MYLIB s'exécute plus vite je pense ( à condition que je me trompe dans la façon d'exécuter du RPN).



Actuellement voici comment je procède : analyse de Gauche à droite de L'expression basée sur 2 piles
- Pile OPS des d'operateurs
- Pile RPN de l'expression

Règle:
-Les Constantes Littérales/Symboliques sont déposées immédiatement sur la Pile RPN
-Les Opérateurs sont déposés sur la pile et seront dépilé par priorité

Le résultats est obtenu directement sur la pile RPN.

En fait je Réorganise l'expression RPN avec la règle suivante :
- Réduction de l'Expression RPN par itération successive
- Sont réduits à chaque itération les Opérateurs ayant uniquement des arguments calculables
- la réduction consite à remplacé l'argument calculable par le Symbole #


Ce qui fait que je peut obtenir la meilleur expression RPN possible si je voulais.
Mais , le problème c'est l'exécution du Code RPN par la Librairie.

La seul méthode que j'ai pu bricole en regardant une expression RPN consite à remettre dans la Pile les arguments ( ie recopier de nouveau ) jusqu'à ce qu'un Opérateur/Fonction les réduise.

Je trouve cela ignoble de devoir recopier des arguments une fois de plus.
Donc , je procède par le symbole '#' pour signifier qu'un argument est sur le haut de la pile.
Puisque le code à exécuté se trouve dans une variable je n'ai donc pas besoin de recopier l'argument à utiliser.


Si quelqu'un peu m'expliquer la meilleur façon d'exécuter du code RPN , j'ai rien trouvé sur le NET.

78

Mais pourquoi veut tu refaire un interpreteur d'expressions algébriques puisqu'AMS en intègre deja un? smile
Il te suffit juste de l'utiliser.

79

juste pour le FUN. je ne savais pas le faire. C'étais l'occasion ou jamais de plancher sur le sujet.

de toute façon c'est bouclé en 3 jrs chrono.
j'utiliserai volontier celui d'AMS (maintenant que j'ai réussi à écrire le mien) mais on n'a pas la même table des TOKEN à condition que je fasse l'effort de calquer mes TOKEN sur ceux d'AMS..

80

Tiens , hier j'ai en envie de sortir une version appauvrie de MyLiB , pour faire de la concurrence aux autres librairie basic.
C'est un peu chiant de virer certaines portion de code mais c'est faisable.
ça fera une LiB de plus le temps que je finisse de le transformer en interpreteur.

Ce qui risque de prendre pas mal de temps.