Skip to content

Commit

Permalink
feat: update main.c for manual testing feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
wilyJ80 committed Dec 8, 2024
1 parent 447b6c6 commit 666a39c
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 11 deletions.
11 changes: 7 additions & 4 deletions build.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
#!/bin/bash

if [[ $1 == 'test' ]]; then
gcc -g ./test/*.c ./lexer/*.c ./parser/*.c -o croc
echo 'built test.'
gcc -g ./test/*.c ./lexer/*.c ./parser/*.c -o croc
echo 'built test.'
elif [[ $1 == 'debug' ]]; then
gcc -g ./debug.c ./lexer/*.c ./parser/*.c -o croc
echo 'built debug.'
else
gcc -g ./main.c ./lexer/*.c ./parser/*.c -o croc
echo 'built main.'
gcc -g ./main.c ./lexer/*.c ./parser/*.c -o croc
echo 'built main.'
fi
73 changes: 73 additions & 0 deletions debug.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#include "./lexer/lexer.h"
#include "./lexer/printer.h"
#include "./lexer/types.h"
#include "./parser/parser.h"
#include "./parser/syntax_error.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// ANSI escape codes
#define RESET "\033[0m"
#define RED "\033[31m"
#define GREEN "\033[32m"

int main(int argc, char *argv[]) {
/*if (argc != 2) {*/
/* fprintf(stderr, "Error. Usage: croc <code>\n");*/
/* return EXIT_FAILURE;*/
/*}*/

FILE *fd;
int lineCount = 1;

fd = fopen("./doc/examples/code.proc", "r");
if (fd == NULL) {
fprintf(stderr, "Error opening file\n");
return EXIT_FAILURE;
}

// lexing!
while (true) {
struct Token token = lexerGetNextChar(fd, &lineCount);
if (token.category == END_OF_FILE) {
fclose(fd);
break;
}
// handle malformed manually to
// keep the printing callback simple.
if (token.category == MALFORMED_TOKEN) {
fprintf(stderr, RED "ERROR: MALFORMED TOKEN %s ON LINE %d\n" RESET, token.lexeme,
lineCount);
exit(EXIT_FAILURE);
}
printToken(token);
printf("\n");
}

printf(GREEN "Lexing successful!" RESET "\n");

int *lc;
int line = 1;
lc = &line;

fd = fopen("./doc/examples/code.proc", "r");
if (fd == NULL) {
fprintf(stderr, "Error opening file\n");
return EXIT_FAILURE;
}

// for integration tests, prog itself needs a previously initialized parser
// with a token too
struct Token token = lexerGetNextChar(fd, lc);
struct Parser parser = {
.fd = fd, .lineCount = lc, .token = token};

enum SYNTAX_ERROR error = prog(&parser);
if (error != NO_ERROR) {
printSyntaxError(error, lc);
exit(EXIT_FAILURE);
}

printf(GREEN "Parsing successful!" RESET "\n");
}
6 changes: 1 addition & 5 deletions doc/examples/code.proc
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
var a = 80 // something
if (a == 80) // something else
for (int i = 0) 'a' '\n' banana '\0'
4.4
int a[2] = {1, 2}
def
19 changes: 18 additions & 1 deletion main.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
#include <stdlib.h>
#include <string.h>

// ANSI escape codes
#define RESET "\033[0m"
#define RED "\033[31m"
#define GREEN "\033[32m"

int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Error. Usage: croc <code>\n");
Expand All @@ -32,18 +37,27 @@ int main(int argc, char *argv[]) {
// handle malformed manually to
// keep the printing callback simple.
if (token.category == MALFORMED_TOKEN) {
fprintf(stderr, "ERROR: MALFORMED TOKEN %s ON LINE %d\n", token.lexeme,
fprintf(stderr, RED "ERROR: MALFORMED TOKEN %s ON LINE %d\n" RESET, token.lexeme,
lineCount);
exit(EXIT_FAILURE);
}
printToken(token);
printf("\n");
}

printf(GREEN "Lexing successful!" RESET "\n");

int *lc;
int line = 1;
lc = &line;

// opening the file again...
fd = fopen("./doc/examples/code.proc", "r");
if (fd == NULL) {
fprintf(stderr, "Error opening file\n");
return EXIT_FAILURE;
}

// for integration tests, prog itself needs a previously initialized parser
// with a token too
struct Token token = lexerGetNextChar(fd, lc);
Expand All @@ -53,5 +67,8 @@ int main(int argc, char *argv[]) {
enum SYNTAX_ERROR error = prog(&parser);
if (error != NO_ERROR) {
printSyntaxError(error, lc);
exit(EXIT_FAILURE);
}

printf(GREEN "Parsing successful!" RESET "\n");
}
7 changes: 6 additions & 1 deletion parser/syntax_error.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@

#define ERROR_QTY 83

// ANSI escape codes
#define RESET "\033[0m"
#define RED "\033[31m"
#define GREEN "\033[32m"

void printSyntaxError(enum SYNTAX_ERROR error, int *lineCount) {
struct ErrorMessage messages[ERROR_QTY] = {
{NO_ERROR, "No syntax errors"},
Expand Down Expand Up @@ -144,7 +149,7 @@ void printSyntaxError(enum SYNTAX_ERROR error, int *lineCount) {

for (int i = 0; i < ERROR_QTY; i++) {
if (error == messages[i].error) {
fprintf(stderr, "Syntax error: %s on line %d\n", messages[i].message,
fprintf(stderr, RED "Syntax error: %s on line %d\n" RESET, messages[i].message,
*lineCount);
}
}
Expand Down

0 comments on commit 666a39c

Please sign in to comment.