Files
PCCCompiler/PCCcompiler/compiler_types.h
2026-02-07 19:44:03 +01:00

81 lines
1.9 KiB
C++

#ifndef COMPILER_TYPES_H
#define COMPILER_TYPES_H
#include <string>
#include <vector>
#include <map>
#include <stack>
// Typy operacji
enum class OpType {
ASSIGN, // a = 5
ADD, // a = b + c
SUB, // a = b - c
MUL, // a = b * c
DIV, // a = b / c
MOD, // a = b % c
EQ, // a == b
PRINT, // print(int)
PRINT_STRING, // print(string) - NOWE
JMP_FALSE, // if (false) skocz...
JMP, // else / pêtla
LOGIC_AND, // &&
LOGIC_OR, // ||
LABEL, // miejsce skoku
CALL, // wywo³anie funkcji
RETURN, // return x
NOP // pusta instrukcja
};
// Pojedynczy rozkaz
struct Instruction {
OpType type;
std::string arg1;
std::string arg2;
std::string arg3;
};
// Definicja funkcji
struct Function {
std::string name;
std::string returnType;
std::vector<std::string> args;
std::vector<Instruction> instructions;
};
// G£ÓWNY STAN KOMPILATORA
struct CompilerState {
// Mapa funkcji
std::map<std::string, Function> functions;
// Zmienne globalne
std::map<std::string, int> globals;
// Zarz¹dzanie stosem
std::map<std::string, int> stackMap;
int stackOffset = 0;
// Stan parsera
Function* currentFunction = nullptr;
int labelCounter = 0;
// Stosy bloków
std::stack<std::string> loopStack;
std::stack<std::string> blockStack;
// --- SEKCJA STRINGÓW (TU BY£Y B£ÊDY) ---
// Lista litera³ów do sekcji .data (np. "str_0" -> "Hello")
// Musi byæ VECTOR, bo iterujemy po nim.
std::vector<std::pair<std::string, std::string>> stringLiterals;
// Licznik do generowania nazw str_0, str_1...
int stringCounter = 0;
// Mapa typów zmiennych (np. "imie" -> "string")
// Musi byæ MAP, bo szukamy po nazwie.
std::map<std::string, std::string> varTypes;
};
#endif