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.