Je travaille sur un analyseur pour RDDL et, comme je l'ai déjà fait, lorsque je définis une union qui contient des types que j'utilise, j'utilise des pointeurs. Par exemple.Pourquoi utilisons-nous des pointeurs pour les classes complexes lors de la définition de l'union dans un fichier parser?
%union {
double d;
int i;
std::string *str;
std::vector<std::string> *vectorStr;
RDDLBlock *rddlBlock;
Domain *domain;
DefineType *defineType;
std::vector<DefineType*> *vectorDefineType;
DomainList *domainList;
std::vector<PvarDefinition*> *vectorPvarDefinition;
PvarDefinition *pVarDefinition;
CpfDefinition *cpfDefinition;
std::vector<CpfDefinition*> *vectorCpfDefinition;
PvarExpression *pVarExpression;
LogicalExpression *logicalExpression;
std::vector<LogicalExpression*> *vectorLogicalExpression;
LConstCaseList *lConstCaseList;
CaseDefine *caseDefine;
std::vector<CaseDefine*> *vectorCaseList;
Parameter *parameter;
ParameterList *parameterList;
ObjectDefine *objectDefine;
std::vector<ObjectDefine*> *objectsList;
PvariablesInstanceDefine* pvariablesInstanceDefine;
std::vector<PvariablesInstanceDefine*> *pvariablesInstanceList;
Instance *instance;
NonFluentBlock *nonFluentBlock;
}
C'est ainsi que j'ai vu la plupart des gens implémenter plusieurs types de jetons dans les parseurs. En cherchant cette réponse sur le web, tout ce que j'ai vu sont les exemples et aucune explication sur pourquoi nous devons utiliser des pointeurs. Une de mes tâches consiste maintenant à «nettoyer les pointeurs» là où c'est possible. Alors ma question est la suivante: pourquoi devons-nous (devons-nous) utiliser des indicateurs dans les syndicats dans ce cas?
EDIT: Ajout de la liste complète des types définis dans union.
Si vous ne savez pas pourquoi vous devez le faire, vous n'avez probablement pas besoin de – wasthishelpful
Vous n'avez donc pas d'énormes éléments sur la pile d'analyse. Si vos éléments ne sont pas énormes, ne vous embêtez pas. – EJP
dans [style C++] (http://stackoverflow.com/q/6990726/995714) ce serait 'std :: string * str;', 'Domain * domain' ... –