mirror of
https://github.com/bigsketti/ProfaneC.git
synced 2024-12-24 14:40:28 +00:00
Lexer now outputs to file
This commit is contained in:
parent
e6ae86f673
commit
838c59cfed
5 changed files with 44 additions and 21 deletions
|
@ -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
9
lexerOutput.txt
Normal 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: }
|
BIN
profaneCompiler
BIN
profaneCompiler
Binary file not shown.
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in a new issue