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> #include <string>
//list of keywords //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 { enum class Keywords {
identifier, identifier, //type 0
integer, integer, //type 1
floatpnt, floatpnt, //type 2
string, string, //type 3
character, character, //type 4
boolean, boolean, //type 5
plus, plus, //type 6
minus, minus, //type 7
multiply, multiply, //type 8
divide, divide, //type 9
l_Paren, l_Paren, //type 10
r_Paren, r_Paren, //type 11
l_Brace, l_Brace, //type 12
r_Brace, r_Brace, //type 13
l_Brack, l_Brack, //type 14
r_Brack, r_Brack, //type 15
semicolon, semicolon, //type 16
end_of_file, end_of_file, //type 17
unknown unknown //type 18
}; };
struct Token { struct Token {
Keywords type; Keywords type;
std::string value; std::string value;
Token(Keywords type, std::string value) : type(type), value(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() { Token Lexer::getNextToken() {
while (currentChar != '\0') { while (currentChar != '\0') {
std::cout << currentChar << std::endl; //std::cout << currentChar << std::endl;
if (std::isspace(currentChar)) { if (std::isspace(currentChar)) {
skipWhiteSpace(); skipWhiteSpace();

View file

@ -5,6 +5,10 @@
#include "/home/mason/code-shit/ProfaneC/headers/lexer.h" #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) { std::ostream& operator<<(std::ostream& os, const Token& token) {
os << "Type: " << static_cast<int>(token.type) << ", Value: " << token.value; os << "Type: " << static_cast<int>(token.type) << ", Value: " << token.value;
return os; return os;
@ -44,5 +48,13 @@ int main() {
std::cout << tokenVec.at(i) << std::endl; 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; return 0;
} }