Lexer now outputs to file

This commit is contained in:
bigsketti 2024-09-25 09:08:18 -04:00
parent e6ae86f673
commit 838c59cfed
5 changed files with 44 additions and 21 deletions

View file

@ -4,33 +4,35 @@
#include <string>
//list of keywords
//types denoted by the index within the enum class
//this is so its easy to pass this info to the parser
enum class Keywords {
identifier,
integer,
floatpnt,
string,
character,
boolean,
plus,
minus,
multiply,
divide,
l_Paren,
r_Paren,
l_Brace,
r_Brace,
l_Brack,
r_Brack,
semicolon,
end_of_file,
unknown
identifier, //type 0
integer, //type 1
floatpnt, //type 2
string, //type 3
character, //type 4
boolean, //type 5
plus, //type 6
minus, //type 7
multiply, //type 8
divide, //type 9
l_Paren, //type 10
r_Paren, //type 11
l_Brace, //type 12
r_Brace, //type 13
l_Brack, //type 14
r_Brack, //type 15
semicolon, //type 16
end_of_file, //type 17
unknown //type 18
};
struct Token {
Keywords type;
std::string value;
Token(Keywords type, std::string value) : type(type), value(value) {}
};

9
lexerOutput.txt Normal file
View file

@ -0,0 +1,9 @@
Type: 0, Value: int
Type: 0, Value: main
Type: 10, Value: (
Type: 11, Value: )
Type: 12, Value: {
Type: 0, Value: return
Type: 1, Value: 0
Type: 16, Value: ;
Type: 13, Value: }

Binary file not shown.

View file

@ -49,7 +49,7 @@ Lexer::Lexer(const std::string &input) {
Token Lexer::getNextToken() {
while (currentChar != '\0') {
std::cout << currentChar << std::endl;
//std::cout << currentChar << std::endl;
if (std::isspace(currentChar)) {
skipWhiteSpace();

View file

@ -5,6 +5,10 @@
#include "/home/mason/code-shit/ProfaneC/headers/lexer.h"
//overloads the << operator to output token type as an integer
//followed by the token value
//the integers corrispond to the order defined in the Keywords enum class
//reference lexer.h for map of token types to indecies
std::ostream& operator<<(std::ostream& os, const Token& token) {
os << "Type: " << static_cast<int>(token.type) << ", Value: " << token.value;
return os;
@ -44,5 +48,13 @@ int main() {
std::cout << tokenVec.at(i) << std::endl;
}
std::ofstream file_out("/home/mason/code-shit/ProfaneC/lexerOutput.txt");
if (file_out.is_open()) {
for (int i = 0; i < tokenVec.size(); i++) {
file_out << tokenVec.at(i) << std::endl;
}
}
return 0;
}