GSC Interpreter
A Turing-complete interpreter developed for a compiler course
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include "gsc/error.hpp"
2#include "gsc/interpreter.hpp"
3#include "gsc/parser.hpp"
4#include "gsc/scanner.hpp"
5#include "gsc/token.hpp"
6#include <fstream>
7#include <iostream>
8#include <vector>
9
10void runFile(std::string_view filename);
11void runPrompt();
12
14
15int main(int argc, char *argv[]) {
16 if (argc > 2) {
17 std::cerr << "Usage: " << argv[0] << " [file.gsc]" << std::endl;
18 std::exit(EXIT_FAILURE);
19 } else if (argc == 2) {
20 runFile(argv[1]);
21 } else {
23 }
24}
25
26std::string readFile(std::string_view filename) {
27 std::ifstream file(filename.data());
28
29 if (!file) {
30 std::cerr << "Could not open file: " << filename << std::endl;
31 std::exit(EXIT_FAILURE);
32 } else {
33 std::string content{std::istreambuf_iterator<char>(file),
34 std::istreambuf_iterator<char>()};
35 return content;
36 }
37}
38
39void run(std::string_view program) {
40 Scanner scanner{program};
41 scanner.scanTokens();
42 std::vector<Token> tokens = scanner.getTokens();
43 Parser parser{tokens};
44 std::vector<std::shared_ptr<Stmt>> statements = parser.parse();
45
46 if (hadError) {
47 std::cerr << "Error while parsing the program." << std::endl;
48 } else {
49 interpreter.interpret(statements);
50 }
51}
52
53void runFile(std::string_view filename) {
54 std::string program = readFile(filename);
55 run(program);
56
57 if (hadError) {
58 std::cerr << "Error while running file: " << filename << std::endl;
59 std::exit(EXIT_FAILURE);
60 } else if (hadRuntimeError) {
61 std::cerr << "Runtime error occurred while running file: " << filename
62 << std::endl;
63 std::exit(EXIT_FAILURE);
64 }
65}
66
67void runPrompt() {
68 while (true) {
69 std::cout << ">> ";
70 std::string line;
71 if (!std::getline(std::cin, line)) {
72 std::cout << std::endl;
73 break;
74 } else {
75 run(line);
76 hadError = false; // Reset error state for the next line
77 }
78 }
79}
int main(int argc, char *argv[])
Definition main.cpp:15
void runPrompt()
Definition main.cpp:67
void run(std::string_view program)
Definition main.cpp:39
void runFile(std::string_view filename)
Definition main.cpp:53
std::string readFile(std::string_view filename)
Definition main.cpp:26
Interpreter interpreter
Definition main.cpp:13