120

Rah purée les parenthèses aussi ça marche lovelove

xkhH

J'ai juste un problème avec les hexa bizarement, faut que je regarde, mais c'est sûrement trois fois rien. smile

Par contre, la symbole % est pas bindé sur le clavier ? Au pire, je vais remplacer quelque chose, mais faudrait prévoir ça. ^^
Pedrom aussi.

Hein t'as vu ça, il me faut que deux lignes pour récupérer ce que je passe en ligne de commande. tongue

121

A moi aussi, depuis peu :] Mais tu économises 2 parenthèses et 2 guillemets !
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

122

(en fait j'ai l'impression d'être hors sujet... pourquoi Sasume parlait-il de ça? Tu n'es pas en train de faire une assembleur Folco?)
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

123

23 messages sont trop pour que je regarde ce qu'il faut que je dise. Folco, c'est bon ?

124

PpHd (./123) :
23 messages sont trop pour que je regarde ce qu'il faut que je dise. Folco, c'est bon ?

OUI
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

125

Thibaut (./114, ./115, ./116), ce que tu faisais, c'est exactement le genre de bidouilles qu'il faut faire pour gérer ce genre d'expressions avec du parsage LL. C'est une bidouille parce que ça ne correspond pas du tout à l'arbre de parsage naturel (tu construis un arbre différent de l'arbre de parsage) et comme tu dis c'est extrèmement compliqué.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

126

S'il est différent mais correct, je m'en contenterai. J'ai jamais rien compris à la formalisation mathématique des grammaires, alors j'avais pris une pile de feuilles et une après midi pour touver un algo qui semblait marcher smile tant pis si c'est pas le plus beau.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

127

C'est le mieux qu'on puisse faire avec du LL(1) de toute façon. smile Donc tu pourras te vanter d'avoir retrouvé tout seul la solution connue au problème de la récurrence à gauche du parsage LL(1) sans même savoir ce que c'est. grin
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

128

PpHd, voilà les messages clés de Kevin qui posent la problématique. Mon parseur marche, et le tien marche de la même manière. Et ceci, pour Kevin, n'est pas conforme :
Kevin Kofler (./100) :
C'est le problème avec le parsage LL(1), les opérations "associatives à gauche" (le plus courant) posent problème.
Kevin Kofler (./102) :
Normalement, + et - doivent avoir la même priorité!

Donc tu as 2 opérations de la même priorité:
x OP y OP z
On dit que l'opération ou la famille d'opérations (genre + et -) OP est associative à gauche si:
x OP y OP z = (x OP y) OP z
On dit que l'opération ou la famille d'opérations (genre + et -) OP est associative à droite si:
x OP y OP z = x OP (y OP z)
L'associativité à gauche ou à droite est une question de conventions, pas une propriété intrinsèque de l'opération, mais la convention courante est que {+,-} est associatif à gauche.

On dit que l'opération ou la famille d'opérations (genre + et -) OP est associative si:
(x OP y) OP z = x OP (y OP z)
(Là, c'est une propriété intrinsèque de l'opération.) On peut donc noter:
(x OP y) OP z = x OP (y OP z) = x OP y OP z
et par conséquent l'opération sera à la fois associative à gauche et associative à droite.

+ est associatif, mais - ne l'est pas, donc la famille {+,-} non plus! Donc si tu parses de manière associative à droite, le résultat ne correspondra pas aux conventions (associativité à gauche).
Le problème, c'est que si tu parses top-down de gauche à droite (LL), tu construis toujours des arbres associatifs à droite. Les arbres associatifs à gauche demandent une récursion (un appel récurrent) à gauche et ce n'est pas possible en parsage LL (tu tombes en une récurrence infinie). Il existe différentes bidouilles pour corriger ça, mais la méthode la plus propre est de parser en LR (bottom-up de gauche à droite). Mais pour ça, il faut construire une table, tu ne peux pas le faire avec un parseur écrit directement à la main.
Kevin Kofler (./104) :
3-2+1 = (3-2)+1. L'algorithme de Martial donne 3-(2+1), ce qui est totalement faux.
Kevin Kofler (./108) :
Thibaut, c'était du parsage par découpage, peut-être, ton truc? (C'est essentiellement du bottom-up, ça, et c'est la manière de laquelle je codais intuitivement le parsage avant d'avoir appris le parsing.) Ce que j'appelle "parsage par découpage", c'est: on veut découper "x+y-z", donc on recherche + et -, en partant de la droite parce que c'est associatif à gauche. Donc on coupe en "x+y" et "z". Le problème, c'est que ça coupe les chaînes en 2 à chaque découpage, donc soit tu copies, soit tu détruis l'original en remplaçant l'opération par des \0. Et tu traverses les chaînes plusieurs fois aussi, donc l'efficacité n'est pas top. Et en plus, tu dois bidouiller quand il y a autre chose que des opérateurs, genre des parenthèses, sinon tu feras des bêtises là aussi.
Cela dit, ce que fait Folco m'a l'air de ressembler à ça, donc dans ce cas c'est facile de corriger la priorité. (Il faut rechercher à partir de la droite quand on découpe pour un opérateur associatif à gauche.)

Qu'en penses-tu ? Notre manière de faire est fondamentalement fausse et il faut corriger ?

129

Je n'aurais qu'une question. Est-ce que 3-2+1 donne 0 ou 2 ?

130

Ben nos algos donnent 2.

Kevin dit que ça fait 0.

Qui a raison ? C'est pas moi le mathématicien dans l'histoire les gars, à vous de voir. grin

131

Par convention, 3-2+1 = (3-2)+1 = 1+1 = 2.

Ton procédé du ./98 décompose d'abord incorrectement en Eval(3, -, *( 2 + 1 )). Mais apparemment ton ComparePriorité résout le problème.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

132

Kevin Kofler (./127) :
Donc tu pourras te vanter d'avoir retrouvé tout seul la solution connue au problème de la récurrence à gauche du parsage LL(1) sans même savoir ce que c'est. grin
Martial aussi sans doute !
D'ailleurs, tu as essayé le parenthesage à droite Martial ? Sur ta copie d'écran, les priorités sont toutes forcées à gauche. Ca roule aussi avec des calculs du genre 100+(3-1*4)*10 ?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

133

Oui.
Pas ton exemple précisément, parce que 3-1*4 est négatif. Si je fais avec 5-1*4, oui.
C'est dû au fait que je fais pas encore de vraies opérations sur 32 bits pour les multiplications et divisions. Mais l'algo est bon. smile
Brunni (./122) :
(en fait j'ai l'impression d'être hors sujet... pourquoi Sasume parlait-il de ça? Tu n'es pas en train de faire une assembleur Folco?)

Là je suis sur l'évaluateur d'expression de mon assembleur. grin Mais t'inquiète pas, tout ça ne tombe pas dans l'oreille d'un sourd. oui

134

il va être top mooomoot ton assembleur si il supporte ce genre de truc plus un linker love

135

Il faudrait déjà qu'il sorte. grin
Mais là je suis décidé, je cherche pas à faire un proof ou à tester je ne sais quelle techno. Je ne peux prédire de rien, mais mon but est d'y arriver. smile

<salife>
En réalité, je n'ai pas fini d'écrire la gestion de la ligne de commande... mais ça fait déjà beaucoup de choses, vu qu'une partie du linker est écrite, la plus grande partie de la table des opcodes, la gestion des symboles (création des symboles, relogés ou non, accès à leur valeur), les labels, l'ouverture des fichiers, la mise en cache et encore d'autre trucs pas essentiels, mais qui serviront partout et qui ne sont plus à faire.

La ligne de commande supportant "define truc=chose", je suis bien obligé de lire le symbole truc, de l'enregistrer, de vérifier son unicité, et d'évaluer l'expression chose.

136

En fait je me demandais, à quoi ça sert un linker pour du code ASM? En fait que réalise le linker et que réalise l'assembleur dans ton cas Folco? smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

137

L'assembleur produit du code objet. C'est à dire tout ce qui peut être assemblé d'entrée de jeu (move.l d0,d1 par exemple).
Le liner va s'occuper de tous les sauts. Quand tu as un saut, tu connais pas encore l'endroit où tu sautes, donc tu peux pas le coder. Tu mets ça dans un table de saut à résoudre après assemblage.

C'est nécessaire parce mon assembleur étant multi-source, il est impossible de savoir où seront, dans le binaire final, les binaires correpondant aux autres fichiers sources.
Et ça, c'est le boulot du linker : rassembler les binaires de chaque source, en créer un unique avec un stub éventul, et résoudre les sauts et adressages entre tout ça.

138

Ordinairement, quels sont les opérateurs les plus prioritaites dans une expression ?
Les décalages >> et << ou les opérations logiques & et | ?

139

Folco (./135) :
En réalité, je n'ai pas fini d'écrire la gestion de la ligne de commande... mais ça fait déjà beaucoup de choses, vu qu'une partie du linker est écrite, la plus grande partie de la table des opcodes, la gestion des symboles (création des symboles, relogés ou non, accès à leur valeur), les labels, l'ouverture des fichiers, la mise en cache et encore d'autre trucs pas essentiels, mais qui serviront partout et qui ne sont plus à faire.
Juste au hasard, tu as testé toutes ces fonctionnalités ? smile
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. »

140

Oui, sauf la mise en cache. Pour ce qui est des symboles, je finirai de tester quand j'aurai fini ce que je fais (ajout d'un symbole avec une valeur, avec un relogement, accès aux données d'un symbole).

141

Cool, en pourcentage d’avancement (sur le projet dans sa totalité), tu pourrais donner un chiffre ? wink
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. »

142

Putain, t'as des questions qui tuent toi, je revenais pour te le dire, on voit la confiance gni

Sincèrement, je sais pas trop évaluer ça. Le linker est pas fait, mais vu mes fichiers objet ça devrait pas être trop galère (ya beaucoup de choses de machées).
Je dirais 20%, peut-être que je m'avance. Je sais pas trop estimer.

Tout ce qui est parsing de la ligne de commande, fichier de conf et ouverture des sources, création des données nécessaires à l'assemblage de chacune est fait et testé. Ca a fait avancer pas mal de domaines connexes, surtout au niveau du parsing, j'ai déjà quelques fonctions puissantes pour la suite.

143

Folco (./138) :
Ordinairement, quels sont les opérateurs les plus prioritaites dans une expression ?Les décalages >> et << ou les opérations logiques & et | ?

Habituellement les >> et << sont prioritaires sur les opérateurs logiques, mais passent après les opérateurs mathématiques communs. Tu peux regarder la table "Priorité des opérateurs" en bas de cette page à titre d'information : c'est celle du langage C.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

144

./137> Okay merci smile alors ce que je te disais c'était pas du ressort de l'assembleur mais du linker du coup
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

145

Oui.

Merci Zephyr. J'étais loin d'imaginer que ces opérateurs étaient si peu prioritaires, j'aurais vraiment pensé l'inverse oO

146

C'est vraiment bizarre effectivement, mais ça arrange bien le C++ parce qu'on peut faire du std::cout << 2+3; sans avoir besoin de parenthèses. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

147

148

où as-tu vu un hack ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

149

Le fait de surcharger les opérateurs de décalage de bits pour signifier l'entrée-sortie.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

150

De tte rien ne vaut printf smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741