zo iNiTiATiON SPEECHES
S01E27 2024-08-24

S01E27 — 24-08-2024.

La cartographie.

jour 27.

Tout est question de chemin, de oui ou de non, d’un j’y vais, j’y vais ou d’un chiche ou bakchich. Ces choix binaires qui vont se présenter à toi lors de tes développements t’emmèneront toujours quelque part. Ce qui compte c’est de ne pas avoir de regret. Je te dis cela, parce que si je pense à nouveau au moment où j’hésitais à réécrire mon Tokenizer, j’avais sérieusement la flemme et je ne voulais pas reculer. Mes échecs m’ont fait rêver de machine à états finis pendant plusieurs nuits.

Mais ce samedi soir 23:14, tu ne peux pas savoir la puissance du quaalude dans lequel je suis. C’est un quaalude de woo-woo qui se rapproche de ça. Pourquoi ? D’abord parce que mon nouveau Tokenizer va faire passer mon language jouet à un langage jouet moderne. Après mes 3-4 heures de sommeil, je me suis fait un petit thé anglais que j’ai engloutit avec du saucisson italien. J’ai senti, petit à petit mon quaalude se réveiller. Je me lance un son pour activer mon focus mode. Je me dandine devant mon écran en essayant d’entrevoir le code que j’ai écri la veille. Au travers de cette fumée, je commence à ne faire qu’un avec monde code. J’exécute à nouveau mon programme, gesticule de tous les côtés suite au résultat concluant qui apparaissent dans mon terminal.

C’est parti, je me fixe mes objectifs de la journée :

  • scanner les nombres — binaires, octales, décimaux, hexadécimaux, les nombres flottants, la notation scientifique.
  • scanner un DSL pour parser les nombres décimaux.

Tout d’abord, d’après mes travaux, analyser des nombres est plus simples qu’analyser un langage de balisage. J’ai fini les deux cibles de ma todo de la journée. J’étais dans mon élan tel un cheval blanc donc j’ai commencé à me préparer des fichiers .tks pour tokens (jetons en français). Pour avoir des cartes pour chacune des catégories de nombres. Grosso modo, c’est une mise à plat des possibilités. Je les utilise comme de la nourriture pour mon Tokenizer. Mais je pense aussi les utiliser pour les tests unitaires aussi. Ça ressemble à ça :


-- atlas: bin base (2).

0b101010            0b110             0b11111111          0b1001              0b100000
0b1010              0b11              0b100101            0b11110000          0b10000
0b11011011          0b10011001        0b101               0b10000001          0b111000
0b10101010          0b11011           0b1000101           0b1111              0b101

0b0001_0000         0b0010_0101       0b1010_1010         0b1100_0011         0b1111_0000
0b1111_1111         0b1010_1101       0b0000_1111         0b1001_1001         0b0110_0110
0b0011_1100         0b0101_1010       0b0111_1001         0b1101_0110         0b1011_0110_1101_0001
0b1110_1101         0b1000_0111       0b0111_1000_0101    0b1101_0011_0110    0b1111_1110_0001
0b1010_1010_1010    0b0101_0101_0101  0b0110_1001_0110    0b1011_1011_1011    0b1100_1100_1100

-- atlas: hex base (16).

0x1A3           0xFF              0x2B7             0x10              0xABC
0x8F            0x0               0xBEEF            0x7D1             0x64
0x3C0           0x9A              0x4F              0x1234            0x5A5
0xDEADBEEF      0x7FFF            0x6B              0xC0DE            0x100

0x1F            0xA0_B0_C0        0x0A_0B_0C        0xCA_FE_BA_BE     0xDE_AD_BE_EF
0xFF_EE_DD_CC   0x12_34_56_78     0x9A_BC_DE_F0     0x1A_2B_3C        0x4D_5E_6F
0xAB_CD_EF      0x12_AB_34_CD     0x9F_8E_7D_6C     0x55_66_77_88     0x11_22_33_44
0xFF_FF_FF_FF   0xA_B_C_D         0x1234_5678       0x9ABC_DEF0       0x0F_0E_0D_0C
0xCA_FE         0xDE_AD           0xAB_CD           0x1234_ABCD       0xFEDC_BA98

-- atlas: oct base (8).

0o123             0o77              0o645             0o12                  0o177
0o10              0o42              0o1000            0o755                 0o1
0o320             0o555             0o4               0o740                 0o64
0o23              0o777             0o150             0o31                  0o60

0o12_34           0o755_644         0o77_77           0o644_755             0o666_777
0o123_456_701     0o777_666_555     0o101_202_303     0o444_555_666         0o111_222_333
0o505_505_505     0o707_707_707     0o123_456         0o654_321             0o777_888
0o1234_567        0o765_432         0o111_000         0o222_111             0o666_555_444
0o444_333_222     0o333_222_111     0o777_000         0o123_456_701_234     0o654_321_123

-- atlas: enotation.

1.23E4        5.67E-8     9.01E2        3.45e3        6.78e-9
1.23E+10      4.56e-4     7.89E12       2.34e-7       5.67E8
8.90e1        3.21E-5     4.56e7        7.89E+11      0.12e3
1.23E-3       4.56e-10    9.87E15       6.54e-8       2.34E9

-- atlas: floats.

3.14              0.001             2.718               100.0             0.25
1.0               42.42             123.456             0.333             9.81
0.75              6.022             0.5                 7.89              0.01
5.67              88.88             0.12                4.56              0.999

3.141_592         2.718_281         1.414_213           1.618_033         0.577_215
1.732_050         0.693_147         0.301_030           6.022_140_857     1.602_176_634
9.109_383_56      2.997_924_58      1.380_649           8.854_187_817     6.674_30
4.135_667_696     2.176_434_1       9.274_010_078_3     5.485_799_09      3.741_657_386
1.054_571_817     2.426_310_238     4.135_667_696       1.054_571_8       3.085_677_58

-- atlas: ints.

42              100         7           256               89
1               33          1024        67                5
9876            3           14          76                250
9               123         456         88                999

1_000           10_000      100_000     1_000_000         2_147_483_647
42_000          56_789      123_456     654_321           987_654
1_234_567       8_765_432   2_468       9_876_543         7_654_321
1_000_000_000   3_456_789   5_678_910   9_876_543_210     4_321
12_345          98_765      65_432      1_111_111         2_222_222

1_000_000_000_000                                         1_000_000_000_000_000                              
1_000_000_000_000_000_000                                 9_223_372_036_854_775_807
4_294_967_295 18_446_744_073_709_551_615                  1_000_000_000_000_000_000_000
340_282_366_920_938_463_463_374_607_431_768_211_456       10_000_000_000_000
100_000_000_000_000                                       100_000_000_000_000_000
10_000_000_000_000_000                                    9_223_372_036_854_775_807
1_000_000_000_000_000_000_000_000                         18_446_744_073_709_551_615
1_000_000_000_000_000_000_000_000_000                     1_000_000_000_000_000_000_000_000_000_000
4_611_686_018_427_387_904                                 9_223_372_036_854_775_807
1_152_921_504_606_846_975                                 1_844_674_407_370_955_161_5
3_689_348_814_741_910_323                                 7_378_697_629_483_820_646
14_757_395_258_967_641_292                                29_514_790_517_935_282_584

-- atlas: parse decimal to binary.

b#1       b#2       b#3       b#4       b#5
b#10      b#15      b#16      b#31      b#32
b#42      b#64      b#127     b#128     b#255
b#256     b#512     b#1023    b#1024    b#2048
b#4096    b#8191    b#16384   b#32767   b#65535

-- atlas: parse decimal to hexadecimal.

x#1       x#2       x#3       x#4       x#5
x#10      x#15      x#16      x#31      x#32
x#42      x#64      x#127     x#128     x#255
x#256     x#512     x#1023    x#1024    x#2048
x#4096    x#8191    x#16384   x#32767   x#65535

-- atlas: parse decimal to octal.

o#1       o#2       o#3       o#4       o#5
o#10      o#15      o#16      o#31      o#32
o#42      o#64      o#127     o#128     o#255
o#256     o#512     o#1023    o#1024    o#2048
o#4096    o#8191    o#16384   o#32767   o#65535

Une belle présentation pour voir directement les différents formats supportés par mon compilateur de bâtard. J’espère que t’apprécies la richesse dans l’expressivité de la syntaxe. Je vais pouvoir bien m’amuser quand je serai arrivé au bout mon analyse lexicale. Biensûr, je ne me suis point a-rrê-ter là. Je t’expliquerai le restant demain. Je dois retourner me passionner.

@invisageable