Parser du code Objective-C (ParseKit ?)
nark
Membre
Bonjour à tous,
Je cherche un moyen de parser du code Objective-C intelligemment. Après quelques recherches sur le net, j'ai appris que cela touche à la théorie des langages et aux grammaires formelles... Un monde bien à lui. J'ai trouvé quelques outils, comme Yacc, ANTLR, Bison... et bien sur, ParseKit. Ce dernier m'intéresse car il m'éviterait d'utiliser une librairie bas niveau.
J'ai donc récupéré les sources, et j'ai trouvé dedans un fichier "objc.grammar" diffinissant la syntaxe du langage Objective-C dans un format proche de BNF (Backus–Naur Form). J'ai donc joyeusement lié ce framework à mon projet, sans aucune difficulté et j'ai suivi la doc pour parser à l'aide d'une grammaire.
Très simple :
J'ai testé avant même d'implémenter les callbacks proposés par le framework, et bien sur cela aurait été trop beau ! L'exécution s'arrête à l'initialisation du parser.
J'obtiens en sortie l'erreur suivante :
Ce genre d'erreur me fait tout de suite penser à une erreur de compilateur qui rencontre une faute de syntaxe à la lecture des sources. J'en déduis que la factory digère mal la grammaire que je lui ai passé en paramètre.
Y a t'il parmi vous des utilisateurs du ParseKit ? Des férus de BNF, ou d'autres ayant rencontré un problème similaire pouvant me proposer une solution ou une alternative ?
Merci de vos conseils.
N.
Je cherche un moyen de parser du code Objective-C intelligemment. Après quelques recherches sur le net, j'ai appris que cela touche à la théorie des langages et aux grammaires formelles... Un monde bien à lui. J'ai trouvé quelques outils, comme Yacc, ANTLR, Bison... et bien sur, ParseKit. Ce dernier m'intéresse car il m'éviterait d'utiliser une librairie bas niveau.
J'ai donc récupéré les sources, et j'ai trouvé dedans un fichier "objc.grammar" diffinissant la syntaxe du langage Objective-C dans un format proche de BNF (Backus–Naur Form). J'ai donc joyeusement lié ce framework à mon projet, sans aucune difficulté et j'ai suivi la doc pour parser à l'aide d'une grammaire.
Très simple :
<br />NSString *gFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"objc.grammar"];<br />NSString *grammar = [NSString stringWithContentsOfFile:gFilePath<br /> encoding:NSUTF8StringEncoding<br /> error:nil];<br /> <br />PKParser *parser = [[PKParserFactory factory] parserFromGrammar:grammar assembler:self];<br /> <br />for(NSString *filepath in [panel filenames]) {<br /> NSString *s = [NSString stringWithContentsOfFile:filepath<br /> encoding:NSUTF8StringEncoding<br /> error:nil];<br /> [parser parse:s];<br />}<br />
J'ai testé avant même d'implémenter les callbacks proposés par le framework, et bien sur cela aurait été trop beau ! L'exécution s'arrête à l'initialisation du parser.
J'obtiens en sortie l'erreur suivante :
<br />After : <br /> category<br />Expected : Symbol =<br />Found : -<br />
Ce genre d'erreur me fait tout de suite penser à une erreur de compilateur qui rencontre une faute de syntaxe à la lecture des sources. J'en déduis que la factory digère mal la grammaire que je lui ai passé en paramètre.
Y a t'il parmi vous des utilisateurs du ParseKit ? Des férus de BNF, ou d'autres ayant rencontré un problème similaire pouvant me proposer une solution ou une alternative ?
Merci de vos conseils.
N.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Note: par contre il y a le "if" défini dans la grammaire C mais je ne crois pas qu'il puisse y avoir un rapport entre les deux du point de vue de la grammaire...
Il faut soit trouver une bonne grammaire soit changer de framework (le code a l'air jeune vu les dates sur github), je vais chercher...
Edit:
La grammaire Objective-C Yacc de GCC 4.5 est masquée dans leur CVS :
http://gcc.gnu.org/viewcvs/branches/gcc-4_5-branch/gcc/objc/
Mais elle doit être très compliquée vu que j'ai trouvé un exemple de grammaire datant de 2004 : http://www.mikeash.com/objcparser/gcc-objc-parse.y
La même simplifiée :
http://www.mikeash.com/objcparser/objCParser.yacc
Bonjour,
Il y a Parce voir ici