summaryrefslogtreecommitdiff
path: root/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'lexer.c')
-rw-r--r--lexer.c198
1 files changed, 0 insertions, 198 deletions
diff --git a/lexer.c b/lexer.c
deleted file mode 100644
index c6c4ffe..0000000
--- a/lexer.c
+++ /dev/null
@@ -1,198 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-#include "lexer.h"
-
-token_t init_token(tokenType_t type, void* value) {
- token_t t;
- t.type = type;
- t.value = value;
- return t;
-}
-tokenSet_t init_tokenset(token_t* tokens, int count) {
- tokenSet_t tokenSet;
- tokenSet.tokens = tokens;
- tokenSet.count = count;
- return tokenSet;
-}
-char* tttos(tokenType_t tokenType) {
- switch (tokenType) {
- case ERR:
- return "ERR";
- case EOL:
- return "EOL";
- case INDENT:
- return "INDENT";
- case STRING:
- return "STRING";
- case INT:
- return "INT";
- case OPEN_PAREN:
- return "OPEN_PAREN";
- case CLOSE_PAREN:
- return "CLOSE_PAREN";
- case START_COMMENT:
- return "START_COMMENT";
- case JUSTIFICATION:
- return "JUSTIFICATION";
- case PREMISE:
- return "PREMISE";
- case NEGATION:
- return "NEGATION";
- case ASSUMPTION:
- return "ASSUMPTION";
- case CONJUNCTION:
- return "CONJUNCTION";
- case DISJUNCTION:
- return "DISJUNCTION";
- case IMPLICATION:
- return "IMPLICATION";
- case BI_IMPLICATION:
- return "BI_IMPLICATION";
- default:
- return "???";
- }
-}
-int advance_whitespace(char** linePointer) {
- int64_t a = (int64_t)linePointer;
- while (**linePointer == ' ') {
- (*linePointer)++;
- }
- return (int)((int64_t)linePointer - a);
-}
-tokenSet_t lex_line(char* line) {
- char** p = malloc(sizeof(char*));
- *p = line;
- int m = 50;
- token_t* tokens = malloc(sizeof(token_t) * m);
- int i = 0;
- while (1) {
- token_t t = lex_first_token(p);
- if (t.type == EOL) {
- break;
- }
- if (t.type == ERR) {
- exit(1);
- }
- tokens[i] = t;
- i++;
- }
- free(p);
- return init_tokenset(tokens, i);
-}
-token_t lex_first_token(char** content) {
- int m = 5;
- char* s = malloc(sizeof(char) * m);
- int c = 0;
- advance_whitespace(content);
- while (**content != '\n') {
- s[c] = **content;
- s[c+1] = '\0';
- (*content)++;
- /* check if we need to parse a string or an int */
- if (s[c] >= 65 && s[c] <= 90) {
- free(s);
- (*content)--;
- return lex_first_string(content);
- }
- else if (s[c] >= 48 && s[c] <= 57) {
- free(s);
- (*content)--;
- return lex_first_int(content);
- }
- /* otherwise, check to see if a symbol has been matched */
- if (strcmp(s, "(") == 0) {
- free(s);
- return init_token(OPEN_PAREN, NULL);
- }
- else if (strcmp(s, ")") == 0) {
- free(s);
- return init_token(CLOSE_PAREN, NULL);
- }
- else if (strcmp(s, "#") == 0) {
- free(s);
- return init_token(START_COMMENT, NULL);
- }
- else if (strcmp(s, " ") == 0) {
- free(s);
- return init_token(INDENT, NULL);
- }
- else if (strcmp(s, "|") == 0) {
- free(s);
- return init_token(JUSTIFICATION, NULL);
- }
- else if (strcmp(s, "pr") == 0) {
- free(s);
- return init_token(PREMISE, NULL);
- }
- else if (strcmp(s, "as") == 0) {
- free(s);
- return init_token(ASSUMPTION, NULL);
- }
- else if (strcmp(s, "i") == 0) {
- free(s);
- return init_token(INTRODUCTION, NULL);
- }
- else if (strcmp(s, "e") == 0) {
- free(s);
- return init_token(ELIMINATION, NULL);
- }
- else if (strcmp(s, "~") == 0) {
- free(s);
- return init_token(NEGATION, NULL);
- }
- else if (strcmp(s, "^") == 0) {
- free(s);
- return init_token(CONJUNCTION, NULL);
- }
- else if (strcmp(s, "v") == 0) {
- free(s);
- return init_token(DISJUNCTION, NULL);
- }
- else if (strcmp(s, "->") == 0) {
- free(s);
- return init_token(IMPLICATION, NULL);
- }
- else if (strcmp(s, "<-") == 0) {
- free(s);
- return init_token(BI_IMPLICATION, NULL);
- }
- else if (c <= m) {
- c++;
- continue;
- }
- else {
- free(s);
- return init_token(ERR, NULL);
- }
- }
- return init_token(EOL, NULL);
-}
-token_t lex_first_string(char** content) {
- int m = 50;
- char* s = malloc(sizeof(char) * m);
- int c = 0;
- advance_whitespace(content);
- while (**content >= 65 && **content <= 90) {
- s[c] = **content;
- (*content)++;
- c++;
- }
- s[c] = '\0';
- return init_token(STRING, s);
-}
-token_t lex_first_int(char** content) {
- int m = 10;
- char* s = malloc(sizeof(char) * m);
- int c = 0;
- advance_whitespace(content);
- while (**content >= 48 && **content <= 57) {
- s[c] = **content;
- (*content)++;
- c++;
- }
- s[c] = '\0';
- int* ip = malloc(sizeof(int));
- *ip = atoi(s);
- free(s);
- return init_token(INT, (void*)ip);
-}