< Je me permet de réinsérer un encart publicitaire concernant mon message original au milieu de cette discussion...
>
La raison pour laquelle je souhaiterais faire ceci pendant le lexing :
la syntaxe exacte de de delphi pour les floats (enfin... celle que j'ai comprise en essayant de compiler 2 bêtes lignes de code) est la suivante :
1 2 3
|
mondouble := 1.0; // ok, car il n'y a pas d'espaces autour du .
mondouble := 2 . 3; // ne marche pas, ni 2. 3, ni 2 .3 |
Ce qui veut dire qu'à cause de cette règle à la con, mon lexer ne peut pas faire sauter tranquillement les espaces... et je dois donc rajouter des tokens "WhiteSpace" dans ma grammaire (pour pouvoir dire que "INT DOT INT" est un float, mais "INT WS DOT WS INT" n'en est pas un, et je n'imagine pas ce que ça donnerait pour les autres règles...), et ça ne m'avait pas l'air très joli.
Alors je m'étais dit, autant faire ce micro parsing dans le lexer - je suis d'accord, ce n'est pas dans l'esprit du lexing, mais bon, ça lèverait des ambiguïtés plus tôt, et ça allègerait d'autant la grammaire...
D'où ma question : est-ce que c'est techniquement possible avec ocamllex de dire "remet les deux caractères que tu viens de lire dans le lexbuf" ? Je n'ai pas vu de fonction convaincante dans le module Lexing, mais je n'ai peut-être pas tout lu. Est-ce qu'il suffit de modifier la position courante?
lexbuf.cur_pos <- {lexbuf.cur_pos where pos := pos -2} (* ou un truc du genre *)
<fin de l'encart publicitaire>
Partager