readme-thing/main.c

177 lines
4.0 KiB
C
Raw Permalink 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);
FreeLexer(l);
writeTokenFile(firstToken);
Node* firstNode = ParseNodes(firstToken);
Node* node = firstNode;
printf("nodes:\n");
while(node != NULL)
{
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;
case NT_Paragraph:
{
ParagraphNode* pnode = (ParagraphNode*)node;
printf("{ParagraphNode ptype:%s}\n", ParagraphTypeString(pnode->ptype));
Token* content = pnode->content;
while(content != NULL)
{
if (content->type == TT_WHITESPACE)
{
printf(" ");
}
else
{
printf("%s", content->literal);
}
content = content->next;
}
printf("\n");
}
break;
case NT_List:
{
ListNode* lnode = (ListNode*)node;
ListDebugPrint(lnode, 0);
printf("\n");
}
break;
default:
printf("%s\n", NodeTypeString(node->type));
}
node = node->next;
}
2021-07-14 08:15:46 -07:00
node = firstNode;
firstNode = NULL;
if (node != NULL)
while ((node = FreeNode(node)) != NULL);
if (node != NULL)
printf("last node != NULL\n");
if (firstNode != NULL)
{
printf("firstNode != NULL\n");
printf("%s\n", NodeTypeString(firstNode->type));
}
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);
}