Quelle est la différence entre cette grammaire: et ceci: p> ? P> S'il y a une différence, comme cela impacte sur la performance ...
Merci p> p>
4 Réponses :
La seule différence est que dans votre première règle de production, les jetons de mots-clés sont définis implicitement. Il n'y a pas d'implication de performance de temps d'exécution pour les jetons définis implicitement contre explicitement. P>
En plus de la réponse de Will, il est préférable de définir vos jetons Lexer explicitement (dans votre grammaire Lexer). Si vous les mélangeez dans votre grammaire d'analyseur, il n'est pas toujours clair dans quel ordre les jetons sont autochtones par le LXER. Lorsque vous les définissez explicitement, ils sont toujours tokenisés dans l'ordre qu'ils ont été placés dans la grammaire Lexer (de haut en bas). P>
La plus grande différence est celle qui peut ne pas vous intéresser. Si vos règles Lexer sont dans le Lexer, vous pouvez utiliser l'héritage pour que la part de plusieurs règles lexères est multiple de règles lexicales. P>
Si vous utilisez simplement des chaînes dans vos règles d'analyse d'analyse, vous ne pouvez pas faire cela. Si vous ne prévoyez jamais de réutiliser votre grammaire Lexer, cet avantage n'a pas d'importance. P>
De plus, je, et je suppose que la plupart des anciens combattants d'Antlr sont plus habitués à trouver les règles Lexer dans la grammaire Lexer plutôt que mélangée à la grammaire d'analyseur, donc on pourrait soutenir que la lisibilité est augmentée en mettant les règles le lexer. p>
Il n'y a pas d'impact sur la performance d'exécution après que l'analyseur ANTLR a été construit sur une approche. P>
Une autre différence: lorsque vous définissez explicitement vos règles LXER, vous pouvez y accéder via le nom que vous leur avez donné (par exemple, lorsque vous devez rechercher un type de jeton spécifique). Sinon, ANTLR utilisera des nombres arbitraires (avec un préfixe). P>