J'écris actuellement l'analyseur pour un compilateur d'un langage de jouets en utilisant Happy & Alex. Depuis une certaine forme de mise en page en option est nécessaire, je dois changer l'état d'Alex avant de correspondre à la block
non-terminal. Malheureusement il semble que le jeton lookahead requis par Happy est lu avant J'ai la chance de changer l'état d'Alex.Happy & Alex - Empêcher le lookahead d'affecter communication parser-lexer
Voici un petit extrait montrant le problème:
funcDef : header localDefs block
^I have to change alex's state
before the underlying lexer
starts reading the block tokens.
Y at-il une approche commune à ce problème?
Comment savez-vous où commence un bloc? Je suppose que 'localDefs' n'est pas auto-terminé, donc il doit y avoir une fonctionnalité lexicale que vous pouvez utiliser pour savoir où le bloc commence. Pourriez-vous peut-être élucider un peu? – rici
@rici Le bloc est entouré de mots-clés begin/end ou est basé sur l'indentation. Il est fondamentalement défini comme begin stmts + end ou stmts autoend. Le lexeur doit être averti qu'un begin est manquant afin de produire un autoend lorsqu'il détecte un changement d'identité. Toute l'approche semble très hacky il doit y avoir un meilleur moyen. –
Je viens de résoudre ce problème _exact_ il y a deux semaines. Je ne pensais pas que quelqu'un d'autre allait le traverser. – Alec