Parser du code Objective-C (ParseKit ?)

narknark Membre
12:37 modifié dans API AppKit #1
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 :

<br />NSString *gFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@&quot;objc.grammar&quot;];<br />NSString *grammar = [NSString stringWithContentsOfFile:gFilePath<br />								&nbsp;  encoding:NSUTF8StringEncoding<br />									error:nil];<br />		<br />PKParser *parser = [[PKParserFactory factory] parserFromGrammar:grammar assembler:self];<br />		<br />for(NSString *filepath in [panel filenames]) {<br />&nbsp; &nbsp; NSString *s = [NSString stringWithContentsOfFile:filepath<br />							encoding:NSUTF8StringEncoding<br />													&nbsp;  error:nil];<br />&nbsp; &nbsp; [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.

Réponses

  • chkdskschkdsks Membre
    janvier 2011 modifié #2
    Je viens de me pencher sur ParseKit pour un projet, vu la grammaire Objective-C fournie c'est normal que vous ne puissiez pas parser un de vos fichiers de projet vu que je n'ai même pas vu les structures de contrôle dedans par exemple, ou alors j'ai loupé quelque chose...

    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
  • devulderdevulder Membre
    12:37 modifié #3
    dans 1285422297:

    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 :

    <br />NSString *gFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@&quot;objc.grammar&quot;];<br />NSString *grammar = [NSString stringWithContentsOfFile:gFilePath<br />								&nbsp;  encoding:NSUTF8StringEncoding<br />									error:nil];<br />		<br />PKParser *parser = [[PKParserFactory factory] parserFromGrammar:grammar assembler:self];<br />		<br />for(NSString *filepath in [panel filenames]) {<br />&nbsp; &nbsp; NSString *s = [NSString stringWithContentsOfFile:filepath<br />							encoding:NSUTF8StringEncoding<br />													&nbsp;  error:nil];<br />&nbsp; &nbsp; [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.


    Bonjour,

    Il y a Parce voir ici
Connectez-vous ou Inscrivez-vous pour répondre.