Heureux génère un analyseur avec la signature :: [Token] -> a
Comment passer une fonction en argument à un parseur Happy généré?
Je voudrais générer un analyseur paramétrés, à savoir, une fonction qui a besoin d'une fonction comme argument pour fournir un analyseur. Donc je voudrais la signature :: (x->y) -> [Token] -> a
. Pourtant, je peux aussi travailler avec la signature :: [Token] -> (x->y) -> a
.
Lorsque la fonction est fixe, je peux la résoudre en important et en affectant la fonction.
import Functions (fixedFunction)
Root : Production Rule
{ $$.argument = fixedFunction
}
Lorsque l'argument est une instance de Show, je peux le résoudre comme suit
Alex:
data Token = ...
| Carg ArgType
Happy:
%token
...
Argument { Carg $$ }
Root : Argument Production Rule
{ $$.argument = $1
}
Voir par exemple mon projet TorXakis pour plus de détails, en particulier le dossier https://github.com/TorXakis/TorXakis/tree/develop/sys/front/src
Cependant, je suis incapable de passer un argument variable qui est une fonction puisqu'une fonction ne dérive pas de Show! Puisque Haskell est un langage fonctionnel, j'ai la forte suspicion que je manque quelque chose de trivial, mais je ne le vois pas ... Quelqu'un peut-il donner un exemple de passage d'une fonction à un analyseur heureusement généré? Merci d'avance!
Pierre
Dans votre analyseur monadique vous n'utilisez pas grammaires attribu es pour autant que je peut voir. Savez-vous si, dans Happy, vous pouvez mélanger des parseurs monadiques et attribuer des grammaires? –
@DamianNadales semble comme c'est possible. Seule une différence syntaxique dans les règles conditionnelles: https://www.haskell.org/happy/doc/html/sec-AributeGrammarsInHappy.html Je ne peux pas imaginer pourquoi il ne devrait pas être possible de mélanger les analyseurs et les attributs monadiques. – Shersh
J'ai demandé parce que l'utilisation de l'analyseur monadique nécessite une syntaxe spéciale '{% ...}' et je ne sais pas si cela peut être fait. –