2009-04-08 6 views

Répondre

8

Je pense que vous pouvez à cela en utilisant l'option --name-prefix Bison, et l'option --prefix à Flex.

Dans les deux cas, ils vous permettent de remplacer le préfixe par défaut "yy" utilisé sur les fonctions générées avec un préfixe de votre choix.

+0

J'utilise lex et yacc mais c'est bon de savoir si on change pour les versions freeware. Merci dave –

+0

ah, mais vous avez mentionné dans vos balises ... – Alnitak

+0

True. S'ils veulent seulement le faire, c'est utiliser flex et bison. Nous aurons du changement pour les utiliser. –

2

Oui, c'est possible. Yacc devrait avoir un drapeau -p, où vous pouvez spécifier un préfixe différent au lieu du "yy" par défaut.

Le fichier généré par lex conatins ne contient qu'un seul symbole utilisé en dehors de: yylex. Vous pouvez compiler avec -Dyylex = mySecondLex, par exemple.

+0

Je dois vérifier, mais c'est exactement ce dont j'ai besoin. Merci dave. –

+0

J'espère que votre version de yacc a ce drapeau. Sinon, vous pouvez passer à bison, ce n'est pas vraiment différent. – Ingo

+0

Ne sont pas leurs symboles comme yytext et ainsi de suite (yywrap?) Qui sont également utilisés à l'extérieur? –

1

Pas une réponse directe, mais vous pouvez envisager d'utiliser une approche plus générique comme GoldParser qui vous permet d'utiliser un moteur générique pour traiter les LALR et DFA déposés générés à partir de vos grammaires. De cette façon, vous pouvez utiliser n'importe quel nombre de grammaires différentes dans la même application, et changer la grammaire ne crée pas de nouveau code source, mais plutôt de nouveaux fichiers de table (qui pourraient être inclus comme ressource intégrée ou similaire).

+0

Nous ne sommes pas en mesure de changer de système au mois mais peut-être un à regarder dans le futur. Merci dave. –

1

Lex standard et yacc n'ont aucun moyen de le faire. Flex et Bison font, comme le font d'autres implémentations. Depuis que vous avez dit (dans un commentaire) que vous n'utilisez pas flex et bison, quelles versions de lex et yacc sont vous utilisez?

+0

POSIX requiert yacc pour prendre en charge les changements de préfixe de symbole avec '-p prefix' (à la place de 'yy'). Fait intéressant, il ne nécessite pas cela pour lex; Je suppose qu'en pratique beaucoup de gens codent à la main l'analyseur lexical et que ce n'était pas si critique. –

Questions connexes