scopeStack.c
Description du code
Fonctions de gestion d'une pile de portées Compilateur LSD010Code source ou contenu du fichier
Code c (scopeStack.c) (141 lignes)
/* * scopeStack.c : Implementation to manage a stack of scopes * for a declaration symbol and his re-declarations * Part of the compiler project for LSD10 language * Gaudry Stéphane * More information on http://www.gaudry.be/langages-lex-yacc-intro.html * ********************************************************** */ #include <stdio.h> #include <stdlib.h> #include <string.h> #if(VERBOSE_LEVEL<=DEB_E) #include <errno.h> #endif #include "scopeStack.h" #include "common.h" /* * ********************************************************** * Internal business * ********************************************************** */ /* * ********************************************************** * Implementation of the header exposed items * See scopeStack.h for these functions comments * ********************************************************** */ ScopeStack* createScopeStack() { if(newScopeStack==NULL) { #if(VERBOSE_LEVEL<=DEB_E) { printMsg(DEB_E,"Allocation Error(ScopeStack)", __FILE__, __LINE__); } #endif //Failure of the compiler behavior, independent of the parsed code } newScopeStack->parentPtr=NULL; newScopeStack->usage=VAR_USAGE_NEVER; newScopeStack->declarationNode = NULL; newScopeStack->functionNode=NULL; return newScopeStack; } void finalizeScopeStack(ScopeStack **scopeStackPtr) { while(*scopeStackPtr) { popScopeStack(scopeStackPtr); } } void pushScopesStack(ScopeStack **scopeStackPtr, int scope, AstNode *declarationNode) { ScopeStack *tempScopeStackPtr = createScopeStack(); // char msg[1024];//todo: minimize length // sprintf( // msg, // "Push scope : %d [15%p] => %s (compiler %s,%d)", // scope, tempScopeStackPtr, declarationNode==NULL?"node null":declarationNode->info->name, // __FILE__, // __LINE__ // ); // printMsg(DEB_EXEC, msg, __FILE__, __LINE__); tempScopeStackPtr->declarationNode = declarationNode; if(declarationNode!=NULL) { declarationNode->info->scopeId = scope; declarationNode->info->scopeDepth = scopeHelperGetCurrentDepth(); } tempScopeStackPtr->parentPtr=*scopeStackPtr; *scopeStackPtr = tempScopeStackPtr; } AstNode* popScopeStack(ScopeStack **scopeStackPtr) { if(!*scopeStackPtr) { return NULL; } // char msg[1024];//todo: minimize length // sprintf( // msg, // "\tBefore Pop scope : %d [15%p] => %s (compiler %s,%d)", // (*scopeStackPtr)->scopeId, // (*scopeStackPtr), // returnVal==NULL?"node null":returnVal->info->name, // __FILE__, // __LINE__ // ); // printMsg(DEB_EXEC, msg, __FILE__, __LINE__); ScopeStack *top = *scopeStackPtr; AstNode *returnVal = top->declarationNode; *scopeStackPtr = top->parentPtr; // sprintf( // msg, // "\tAfter Pop scope : %d [15%p] => %s (compiler %s,%d)", // (*scopeStackPtr)==NULL?INITIAL_INT:(*scopeStackPtr)->scopeId, // (*scopeStackPtr), // returnVal==NULL?"node null":returnVal->info->name, // __FILE__, // __LINE__ // ); // printMsg(DEB_EXEC, msg, __FILE__, __LINE__); return returnVal; } void setScopesStackDepth(ScopeStack *scopeStack, int scopeDepth) { scopeStack->declarationNode->info->scopeDepth=scopeDepth; } int getScopeDepth(ScopeStack *scopeStack) { if(scopeStack==NULL) { // printf("\n; scopeStack null (compiler %s, %d)\n", __FILE__, __LINE__); return ERROR_INT; } if(scopeStack->declarationNode==NULL) { // printf("\n; declaration node null (compiler %s, %d)\n", __FILE__, __LINE__); return ERROR_INT; } return scopeStack->declarationNode->info->scopeId; }
Autres extraits de codes en c
- DisquetteDispo Vérifier la disponibilité du lecteur de disquette
- Suite de Fibonacci Exemple d'itération en C
- Suite de Fibonacci Exemple de récursion en C
- astDataRepresentation.h Représentation de données de l'arbre syntaxique abstrait Compilateur LSD010
- ast.h Arbre syntaxique abstrait Compilateur LSD010
- ast.c Arbre syntaxique abstrait Compilateur LSD010
- symbolsTableDataRepresentation.h Représentation de données de la table des symboles Compilateur LSD010
- symbolsTable.h Fonctions de gestion de la table des symboles Compilateur LSD010
- symbolsTable.c Fonctions de gestion de la table des symboles Compilateur LSD010
- hashCode.h Fonctions de hachage Compilateur LSD010
- hashCode.c Fonctions de hachage Compilateur LSD010
- scopeStack.h Fonctions de gestion d'une pile de portées Compilateur LSD010
- scopeStack.c Fonctions de gestion d'une pile de portées Compilateur LSD010
- scopeHelper.h Fonctions de gestion de la portée courante Compilateur LSD010
- console.h Fonctions d'affichage Compilateur LSD010
- console.c Fonctions d'affichage Compilateur LSD010
- graphVizHelper.h Génération d'une image d'un arbre syntaxique abstrait.
Classe d'intégration de l'outil GraphViz. Compilateur LSD010 - graphVizHelper.c Génération d'une image d'un arbre syntaxique abstrait.
Classe d'intégration de l'outil GraphViz. Compilateur LSD010 - common.h Définition des constantes et variables communes Compilateur LSD010
- pcode.c Génération de p-code Compilateur LSD010
- pcode.h Génération de p-code Compilateur LSD010
- Tous les extraits
Version en cache
21/11/2024 11:49:01 Cette version de la page est en cache (à la date du 21/11/2024 11:49:01) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 05/10/2009, dernière modification le 28/10/2018
Source du document imprimé : https://www.gaudry.be/sniplet-rf-lsd010/project/source/scopeStack.c.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.