Some basic tokens
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
*.o
|
*.o
|
||||||
|
brb
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
#include "Lexer.h"
|
#include "Lexer.h"
|
||||||
#include "Token.h"
|
#include "Token.h"
|
||||||
|
|
||||||
std::vector<Token> tokens() {
|
Lexer::Lexer(std::string source) : source(source) {
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<Token> Lexer::tokens() {
|
||||||
|
return { Token::integer, Token::real, Token::integer, Token::eof };
|
||||||
}
|
}
|
||||||
4
Lexer.h
4
Lexer.h
@@ -6,7 +6,11 @@
|
|||||||
class Token;
|
class Token;
|
||||||
|
|
||||||
class Lexer {
|
class Lexer {
|
||||||
|
private:
|
||||||
|
std::string source;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Lexer(std::string source);
|
||||||
std::vector<Token> tokens();
|
std::vector<Token> tokens();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
17
Token.cpp
17
Token.cpp
@@ -1 +1,18 @@
|
|||||||
#include "Token.h"
|
#include "Token.h"
|
||||||
|
|
||||||
|
Token::Token(Kind kind): kind(kind) {
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Token::toString() {
|
||||||
|
switch (kind) {
|
||||||
|
case integer:
|
||||||
|
return "INTEGER";
|
||||||
|
break;
|
||||||
|
case real:
|
||||||
|
return "REAL";
|
||||||
|
break;
|
||||||
|
case eof:
|
||||||
|
return "EOF";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
9
Token.h
9
Token.h
@@ -1,6 +1,8 @@
|
|||||||
#ifndef TOKEN_H
|
#ifndef TOKEN_H
|
||||||
#define TOKEN_H
|
#define TOKEN_H
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
class Token {
|
class Token {
|
||||||
public:
|
public:
|
||||||
enum Kind {
|
enum Kind {
|
||||||
@@ -8,6 +10,13 @@ public:
|
|||||||
real,
|
real,
|
||||||
eof
|
eof
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
Kind kind;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Token(Kind kind);
|
||||||
|
std::string toString();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
34
main.cpp
Normal file
34
main.cpp
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include "Lexer.h"
|
||||||
|
#include "Token.h"
|
||||||
|
|
||||||
|
std::string readFile(std::string fileName) {
|
||||||
|
std::ifstream file(fileName.c_str(), std::ios::in | std::ios::binary | std::ios::ate);
|
||||||
|
if (!file.is_open()) {
|
||||||
|
std::cerr << "Cannot open file " << fileName << std::endl;
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::streamsize fileSize = file.tellg();
|
||||||
|
file.seekg(0, std::ios::beg);
|
||||||
|
std::vector<char> fileBytes(fileSize);
|
||||||
|
file.read(fileBytes.data(), fileSize);
|
||||||
|
return std::string(fileBytes.data(), fileSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
if (argc < 2) {
|
||||||
|
std::cerr << "Need to provide a file name" << std::endl;
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string source = readFile(std::string(argv[1]));
|
||||||
|
Lexer lexer(source);
|
||||||
|
std::vector<Token> tokens = lexer.tokens();
|
||||||
|
for (Token &token : tokens)
|
||||||
|
std::cout << token.toString() << " ";
|
||||||
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user