11
votes

Partage des constantes entre les langues

J'ai une longue liste de constantes que j'ai besoin d'accéder à plusieurs projets dans différentes langues (Verilog, C, C ++ et C #). Plutôt que de les répéter dans chaque langue, y a-t-il un bon moyen de les partager?

La seule chose à laquelle je pourrais penser serait un fichier texte et un script de prétraitement? Est-ce la meilleure solution ou y a-t-il quelque chose de plus facile / plus élégant?


1 commentaires

6 Réponses :


0
votes

Vous pourriez avoir un fichier xml avec les constantes à partager et l'avoir analysé dans chaque langue.


1 commentaires

Cela vous donnera des valeurs d'exécution et ne compilez pas les constantes de temps.



9
votes

Un script de prétraitement qui met à jour automatiquement ces constantes de votre code est probablement la meilleure méthode. Engagez le code avec votre projet pour assurer l'exactitude et faites-la faire une partie du script de construction.


1 commentaires

C'est ce que nous faisions à mon emploi précédent (mélange C, VHDL, Assembleur et Matlab). Notez que les cas spéciaux montaient rapidement cependant, si vous voulez faire quelque chose de plus compliqué que de simples constantes entières (par exemple, être capable de spécifier des choses dans Hex, des constantes définies en termes d'autres).



6
votes

Vous pouvez les conserver dans un document XML et écrire des scripts XSLT pour chaque langue pour générer les fichiers source appropriés dans chaque construction.


1 commentaires

Je pense que c'est une solution superbe - cela permettrait également une manipulation des cas spéciaux. Et c'est extensible.



1
votes

Pouvez-vous utiliser votre maquillage (ou votre équivalent) pour définir ces constantes? Pour C et C ++. Vous pouvez utiliser les options CLI du compilateur pour définir les valeurs de pré-processeur pour les constantes. Je n'ai pas beaucoup fait de la personnalisation de la ville pour Verilog, mais je soupçonne que quelque chose de similaire pourrait exister aussi.


0 commentaires

1
votes

Vous pouvez écrire un fichier simple sous la forme de xxx

, puis appliquez quelque chose comme, pour C:

S / \ ([A- za-z] [A-za-z1-9 _] * \ \) [\ t] * = [\ t] * \ \ \ \ \ \ \ \) / # Définir \ 1 \ 2 / < P> Sa meilleure valeur que vous devriez avoir besoin de spécifier des types, car toutes les langues ne vous permettront pas d'utiliser une macro pré-comprimé qui ne se soucie pas du type.

Vous pouvez faire une lexer / analyseur dans Flex. / Bison pour analyser le fichier de configuration. Ce sera plus clair et plus facile à étendre.


0 commentaires

0
votes

Pour Verilog (au moins pour le système Verilog) et C ++, vous pouvez avoir toutes les constantes décrits comme une liste (en supposant que tous sont du même type), comme les suivantes:

#ifdef CPP
    const int
#elsif VERILOG
    parameter int
#elsif CSHARP
    class Constants {
       const int
#endif

    a = 0,
    c = 1,
    d = 2;

#ifdef(CSHARP)
    };
#endif


0 commentaires