Salut,
je suis en train de me mettre à Spirit là, mais je n'arrive pas encore à faire ce que je veux.
Le but est de pouvoir reconnaitre des expressions du type :
F(a), F(G(a,b),c); F(a).b, etc ...
je pense avoir bien défini ma grammaire pour cela mais je n'arrive pas à en faire ce que je veux.
Voila ma grammaire :
Code :
- expression = (function
- | term)
- >> *(ch_p('.') >>
- (function
- | term));
- function = (term >> no_node_d[ch_p('(')] >> function_param >> no_node_d[ch_p(')')])/*[&printTest]*/;
- term = leaf_node_d[lexeme_d[(+
- (
- alnum_p
- | ch_p('_')
- )
- )]]/*[&printTest]*/;
|
J'ai tenté de passer par un parse tree, mais j'ai l'impression qu'évaluer le parse tree me complique encore plus les choses que de rajouter des appels de fonction dans ma grammaire. L'AST m'est impossible car il m'enlève des noeuds intéressants. Pour un parse tree mon soucis c'est que pour la règle function je n'obtiens pas de
variable, il me donnera F pour la règle term plutot, ce qui complique
pas mal les choses ... J'aurais bien aimé qu'il me reconnaisse F
comme fonction et le reste comme intérieur de la fonction, mais je
n'arrive pas à comprendre comment y arriver. Il y a bien root_node_d qui y ressemble je pense mais en fait non.
Si je tente un appel de fonctions dans ma grammaire :
Code :
- function = (term[&maFonction] >> no_node_d[ch_p('(')] >> function_param
- >> no_node_d[ch_p(')')])/*[&printTest]*/;
|
Pour F(a), cela appelera 2 fois maFonction, une fois pour F et une pour a donc ca n'est pas bon non plus
J'ai possiblement pas compris le principe du parser j'imagine, mais ca fait pres d'une semaine que j'essaie de voir comment travailler avec Spirit tout de même...
Merci
Message édité par gee le 20-12-2006 à 17:08:25