source: liacs/coco/assignment4/SymbolTable.h@ 400

Last change on this file since 400 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

File size: 2.0 KB
RevLine 
[2]1/*
2 * SymbolTable.h
3 *
4 * This file contains the declaration of the "SymbolTable" structure.
5 * It is part of the assignment for the Compiler Construction course at the
6 * Leiden Institute of Advanced Computer Science (LIACS), Leiden University.
7 *
8 * Note: when a SymbolTable is deleted, all Scope objects contained in that
9 * SymbolTable are also deleted.
10 */
11
12#ifndef _SYMBOLTABLE_H_
13#define _SYMBOLTABLE_H_
14
15#include <cstdio>
16#include <string>
17#include <vector>
18
19#include "Scope.h"
20#include "Symbol.h"
21
22using namespace std;
23
24class SymbolTable {
25 public:
26 // Constructor
27 SymbolTable ();
28
29 // Destructor: deletes all Scopes contained in this SymbolTable
30 ~SymbolTable ();
31
32 // Creates a new Scope with the given name and sets it as current scope.
33 // Returns NULL if the name is already used.
34 Scope * AddScope (string scope);
35
36 // Returns a pointer to the Scope object with the given name
37 Scope * GetScope (string scope);
38
39 // Returns a pointer to the root scope
40 Scope * GetRootScope ();
41
42 // Set the current scope
43 // Returns -1 on error
44 int SetCurrentScope (string scope);
45
46 // Get the current scope name
47 string GetCurrentScopeName ();
48
49 // Adds a symbol to the current scope
50 // Returns -1 on error
51 int AddSymbol (Symbol * symbol);
52
53 // Adds a symbol to the given scope
54 // Returns -1 on error
55 int AddSymbol (string scope, Symbol * symbol);
56
57 // Find a symbol in the current scope, or look in the parent scope, if it
58 // cannot be found in the current one.
59 // Returns NULL if the symbol cannot be found anywhere.
60 Symbol * GetSymbol (string name);
61
62 // Find a symbol in the given scope; optionally look in the parent scope,
63 // if it cannot be found in the given one.
64 // Returns NULL if the symbol cannot be found.
65 Symbol * GetSymbol (string scope, string name, bool lookInParentScope);
66
67 // Dump the contents of the symbol table
68 void Dump (FILE * file);
69
70 private:
71 int myCurrentScope;
72 vector<Scope *> myScopes;
73};//SymbolTable
74
75#endif
76
Note: See TracBrowser for help on using the repository browser.