readme-thing/main.c

138 lines
2.9 KiB
C
Raw Normal View History

2021-07-14 08:15:46 -07:00
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "main.h"
#include "token.h"
#include "lexer.h"
#include "node.h"
void writeTokenFile(Token* startToken);
2021-07-14 08:15:46 -07:00
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]);
if (l == NULL) {
printf("lexer borked\n");
return 3;
}
Token* current = NULL;
Token* firstToken = NULL;
2021-07-14 08:15:46 -07:00
TokenType tt;
do
{
Token* t = NextToken(l);
tt = t->type;
if (current != NULL) {
current->next = t;
}
current = t;
if (firstToken == NULL) {
firstToken = t;
}
2021-07-14 08:15:46 -07:00
}
while(tt != TT_EOF);
writeTokenFile(firstToken);
Node* node = ParseNodes(firstToken);
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;
}
2021-07-14 08:15:46 -07:00
2023-10-22 14:11:02 -07:00
//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
//);
2021-07-14 08:15:46 -07:00
return 0;
}
void
writeTokenFile(Token* startToken)
2021-07-14 08:15:46 -07:00
{
int count;
FILE* fp = fopen("tokens.txt", "w");
if (fp == NULL)
{
printf("unable to open output.txt\n");
return;
}
Token* current = startToken;
for(count = 0; current != NULL; count++) {
if (count == 0 && current == NULL)
2021-07-14 08:15:46 -07:00
{
printf("first token null\n");
break;
2021-07-14 08:15:46 -07:00
}
/*printf("writeTokenFile(): %s\n", TokenString(current->token));*/
fprintf(fp, "%s\n", TokenString(current));
2021-07-14 08:15:46 -07:00
current = current->next;
}
fclose(fp);
if (count == 0) {
printf("nothing written to file!\n");
}
2021-07-14 08:15:46 -07:00
printf("Token count: %d\n", count);
}