Je voudrais analyser C++ typedef instructions simples telles queComment pouvez-vous analyser de simples instructions typedef C++?
typedef Class NewNameForClass;
typedef Class::InsideTypedef NewNameForTypedef;
typedef TemplateClass<Arg1,Arg2> AliasForObject;
j'ai écrit la grammaire correspondante que je voudrais voir utilisé dans l'analyse syntaxique.
Name <- ('_'|letter)('_'|letter|digit)*
Type <- Name
Type <- Type::Name
Type <- Name Templates
Templates <- '<' Type (',' Type)* '>'
Instruction <- "typedef" Type Name ';'
Une fois que cela est analysé, tout ce que je vais vouloir faire est de générer du code XML avec les mêmes informations (mais pondus différemment)
Quelle est la langue la plus efficace pour la rédaction d'un tel programme? Comment pouvez-vous y parvenir?
EDIT: Ce que je suis venu avec l'aide de Spirit Boost (ce n'est pas parfait, mais il est assez bon pour moi, au moins pour l'instant)
rule<> sep_p = space_p;
rule<> name_p = (ch_p('_')|alpha_p) >> *(ch_p('_')|alpha_p|digit_p);
rule<> type_p = name_p
>> !(*sep_p >>str_p("::") >> *sep_p>> name_p)
>> *(*sep_p >> ch_p('*'))
>> !(*sep_p >> str_p("const"))
>> !(*sep_p >> ch_p('&'));
rule<> templated_type_p = name_p >> *sep_p
>> ch_p('<') >> *sep_p
>> (*sep_p>>type_p>>*sep_p)%ch_p(',')
>> ch_p('>') >> *sep_p;
rule<> typedef_p = *sep_p
>> str_p ("typedef")
>> +sep_p >> (type_p|templated_type_p)
>> +sep_p >> name_p
>> *sep_p >> ch_p(';') >> *sep_p;
rule<> typedef_list_p = *typedef_p;
Merci, vous avez absolument raison, je n'avais pas pris en compte les espaces de noms. Je devrai également mettre à jour la grammaire pour ajouter des références et des pointeurs.Je ne me soucie pas des pointeurs de fonction, donc ça devrait être un soulagement! :-) Je ne connais pas les multiples cibles typedef. –
J'ai ajouté un exemple pour plusieurs cibles typedef – JaredPar
Merci pour l'exemple. Je peux vivre sans eux aussi :-) –