J'ai défini des éléments de base pour analyser un truc tout bête:
comment = //[^\n]* kwBegin = begin integerLitteral = $digit+ symbol = [a-zA-Z_][a-zA-Z0-9_]* whitespace = (\ |\n)+ digit = [0-9]
Ca se comprend facilement, les symboles précédés d'un $ sont non terminaux. Ca semble une bonne idée tout ça, mettons que je veux lui faire analyser la phrase suivante:
begin 1//fini
Ca fonctionne:
Found 'begin' (type motBegin) Found ' ' (type whitespace) Found '1' (type integer_litteral) Found '//fini' (type comment)
Par contre ça merde à pas mal de niveaux, par exemple si je fais ceci:
1b
1 est détecté comme un entier puis b comme un symbole, alors qu'en fait c'est lexicalement incorrect. Pareil si j'écris beginthat il va détecter le begin puis le that. Il faudrait je pense avoir un mécanisme de séparation des mots, mais pas pour tous, par exemple une parenthèse n'est pas nécessairement suivie d'un caractère spécial.
Bref je sais pas si je suis sur la bonne voie (déjà) et quelle serait la meilleure solution pour répondre à mon problème.
Bref si vous avez des conseils c'est volontiers
