#include #include #include "operetta.h" #include "lexer.h" #include "parse.h" #include "proposition.h" #include "eval.h" int main(int argc, char** argv) { /* read file */ char* path = argv[1]; char* content = read_file(path); int lineCount = count_lines(content); lineSet_t lines = parse_lines(content, lineCount); for (int i = 0; i < lines.count; i++) { line_t line = lines.lines[i]; printf("%d. ", i + 1); for (int j = 0; j < line.scope.depth; j++) { printf(" > "); } write_prop(line.proposition); printf(" BECAUSE: "); write_just(line.justification); printf(just_is_sound(line.proposition, line.justification, lines) ? " " : " "); printf("\n"); } free(content); } void write_prop(prop_t prop) { if (prop.isNegative) { printf("%s", "!"); } if (prop.isSimple) { printf("%s", prop.name); } else { printf("("); write_prop(*(prop.propA)); printf(" %s ", tttos(prop.relation)); write_prop(*(prop.propB)); printf(")"); } } void write_just(just_t just) { printf("%s", jrtos(just.rule)); for (int i = 0; i < just.referencesCount; i++) { printf(" %d", just.references[i]); } } char* read_file(char* path) { FILE* file = fopen(path, "r"); if (file == NULL) { printf("file %s does not exist\n", path); } fseek(file, 0, SEEK_END); unsigned long int length = ftell(file); fseek(file, 0, SEEK_SET); char* out = malloc((length + 1) * sizeof(char)); fread(out, length, 1, file); fclose(file); out[length] = '\0'; return out; }