J'écris un frontal pour une langue (par ocamllex
et ocamlyacc
).Manipuler fidèlement les espaces blancs dans une jolie imprimante
Ainsi, le frond-end peut créer un Abstract Syntax Tree (AST)
à partir d'un programme. Ensuite, nous écrivons souvent une jolie imprimante, qui prend un AST et imprime un programme. Si plus tard nous voulons juste compiler ou analyser l'AST, la plupart du temps, nous n'avons pas besoin que le programme imprimé soit exactement le même que le programme original, en termes d'espacement des blancs. Cependant, cette fois, je veux écrire une jolie imprimante qui imprime exactement le même programme que l'original, en termes d'espacement des blancs. Par conséquent, ma question est de savoir quelles sont les meilleures pratiques pour gérer l'espacement des blancs tout en essayant de ne pas trop modifier les types d'ASAT. Je ne veux vraiment pas ajouter un nombre (d'espaces blancs) à chaque type dans l'AST.
Par exemple, voici comment je traite actuellement avec (c.-à-sauter) espacement blanc lexer.mll
:
rule token = parse
...
| [' ' '\t'] { token lexbuf } (* skip blanks *)
| eof { EOF }
Est-ce que quelqu'un sait comment changer cela ainsi que d'autres parties du front-end prendre correctement en compte l'espacement des blancs pour une impression ultérieure?
Si votre jolie imprimante n'altère en aucun cas les espaces, que fait-elle exactement qui justifie le mot "jolie"? :) En d'autres termes, pourquoi ne régurgitez-vous pas tout le texte d'entrée? – rici
Je vois ... c'est parce que pour certaines parties d'un programme, je ne veux pas modifier les espaces blancs. Par exemple, pour un appel de fonction 'f (arg0, arg1, arg2, arg3)', je veux garder tel quel, plutôt que de le changer en joli 'f (arg0, arg1, arg2, arg3)'. – SoftTimur