48 lines
898 B
C
48 lines
898 B
C
|
//
|
||
|
// Created by Administrator on 2021/4/30.
|
||
|
//
|
||
|
|
||
|
#ifndef SYNTAXPARSER_SYMBOLTABLE_H
|
||
|
#define SYNTAXPARSER_SYMBOLTABLE_H
|
||
|
|
||
|
#include <map>
|
||
|
#include <vector>
|
||
|
#include <string>
|
||
|
#include <stdexcept>
|
||
|
|
||
|
#include <Symbol.h>
|
||
|
|
||
|
|
||
|
class SymbolTable {
|
||
|
|
||
|
int index = 1;
|
||
|
|
||
|
std::map<std::wstring, Symbol *> table;
|
||
|
|
||
|
std::map<int, Symbol *> cache;
|
||
|
|
||
|
std::vector<const Symbol *> line;
|
||
|
|
||
|
public:
|
||
|
|
||
|
SymbolTable();
|
||
|
|
||
|
[[nodiscard]] const std::vector<const Symbol *> &getAllSymbols() const {
|
||
|
return line;
|
||
|
}
|
||
|
|
||
|
int addSymbol(const std::wstring& name, bool terminator);
|
||
|
|
||
|
[[nodiscard]] const Symbol *getSymbol(int symbol_index) const;
|
||
|
|
||
|
[[nodiscard]] int getSymbolIndex(const std::wstring &name) const;
|
||
|
|
||
|
void modifySymbol(int idx, const std::wstring &name, bool terminator, bool start);
|
||
|
|
||
|
[[nodiscard]] const Symbol *getStartSymbol() const;
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif //SYNTAXPARSER_SYMBOLTABLE_H
|