#include #include #include #include "main.h" #include "token.h" #include "lexer.h" #include "node.h" void writeTokenFile(TokenList* tl); int main(int argc, const char** argv) { /*int i; for(i = 0; i < argc; i++) { printf("[%d:%d] %s\n", i, argc, argv[i]); }*/ if (argc <= 1) { printf("Missing input file\n"); return 1; } if (argc > 2) { printf("Too many arguments\n"); return 2; } Lexer* l = NewLexer(argv[1]); TokenList* current = malloc(sizeof(TokenList)); TokenList* tl = current;//= malloc(sizeof(TokenList)); current->token = NULL; current->next = NULL; TokenType tt; do { Token* t = NextToken(l); tt = t->type; current = TokenListAdd(current, t); } while(tt != TT_EOF); writeTokenFile(tl); NodeList* nl = ParseNodes(tl); Node* node = nl->first; printf("nodes:\n"); while(node != NULL) { /*PrintNodeType(node->type);*/ switch (node->type) { case NT_Header1: case NT_Header2: case NT_Header3: case NT_Header4: { HeaderNode* hnode = (HeaderNode*)node; printf("{HeaderNode type:%s text:%s}\n", NodeTypeString(hnode->type), hnode->rawText); } break; case NT_BlockCode: { CodeBlockNode* cnode = (CodeBlockNode*)node; printf("{CodeBlockNode text:%s}\n", cnode->rawText); } break; case NT_Error: { ErrorNode* enode = (ErrorNode*)node; printf("{ErrorNode error:%s}\n", enode->error); } break; default: printf("%s\n", NodeTypeString(node->type)); } node = node->next; } printf("rawLen: %d position: %d readPosition: %d ch: %c line: %d column: %d\n", l->rawLen, l->position, l->readPosition, l->ch, l->line, l->column ); return 0; } void writeTokenFile(TokenList* tl) { printf("writeTokenFile() start\n"); int count; FILE* fp = fopen("tokens.txt", "w"); if (fp == NULL) { printf("unable to open output.txt\n"); return; } TokenList* current = tl; for(count = 0; current != NULL; count++) { if (count == 0 && current->token == NULL) { printf("first token null\n"); break; } /*printf("writeTokenFile(): %s\n", TokenString(current->token));*/ fprintf(fp, "%s\n", TokenString(current->token)); current = current->next; } fclose(fp); if (count == 0) { printf("nothing written to file!\n"); } printf("Token count: %d\n", count); }