aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2024-09-22 19:34:43 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2024-09-22 19:34:43 +0330
commitf79290084948f3cf140395c270c07cf29ca58e8d (patch)
treed716526678782153f3617bbf78984b4c4ebed380 /src/main.c
parentd2ab53c625d386a4fbc6a9d5a5eb29faab1b3f0c (diff)
Better errors
Added variables
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c108
1 files changed, 66 insertions, 42 deletions
diff --git a/src/main.c b/src/main.c
index c23696e..ea85110 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,62 +1,70 @@
#include <stdlib.h>
+#include <string.h>
#include <utils/file.h>
#include <utils/time.h>
#include <vm/runner/runner.h>
+#include "compiler/tree_parser/tree_parser.h"
+#include "utils/types.h"
+
static const char *codes[] = {
- "print(\"\");",
+ "print(\"Hello\\n\");",
};
-bool run(char const *restrict code) {
- bool ranSuccess = false;
- const Nodes nodes = lexer(code);
- ParsedNode *parsedNode = parser(nodes);
- if (parsedNode != NULL) {
- Instructions instructions = codeGenerator(parsedNode);
- if (instructions.size != ERROR_SIZE) {
- ranSuccess = runner(instructions);
- deleteInstructions(instructions);
- }
- deleteParsedNode(parsedNode);
- }
- deleteNodes(nodes);
- return ranSuccess;
-}
-
Clock runWithPrint(char const *restrict code) {
Clock sum = 0;
Clock diff = 0;
- printf("----code:\n%s\n----\n", code);
+ fprintf(stderr, "----code:\n%s\n----\n", code);
Clock start = getTimeInNano();
const Nodes nodes = lexer(code);
diff += getTimeInNano() - start;
sum += diff;
- printNodes(nodes);
- printf("----lexing in %ldns\n", diff);
- start = getTimeInNano();
- ParsedNode *parsedNode = parser(nodes);
- diff = getTimeInNano() - start;
- sum += diff;
- printf("----parsing in %ldns\n", diff);
- if (parsedNode != NULL) {
- printParsedNode(parsedNode);
+ if (nodes.size != ERROR_SIZE) {
+ printNodes(nodes);
+ fprintf(stderr, "----lexing in %ldns\n", diff);
start = getTimeInNano();
- Instructions instructions = codeGenerator(parsedNode);
- if (instructions.size != ERROR_SIZE) {
- diff = getTimeInNano() - start;
- sum += diff;
- printf("----code_generator in %ldns\n", diff);
- printInstructions(instructions);
+ ParsedNode *parsedNode = _parser(nodes, code);
+ diff = getTimeInNano() - start;
+ sum += diff;
+ if (parsedNode != NULL) {
+ printParsedNode(parsedNode);
+ fprintf(stderr, "----node parsing in %ldns\n", diff);
start = getTimeInNano();
- bool ranSuccess = runner(instructions);
+ ParsedTree *parsedTree = _treeParser(parsedNode, code);
diff = getTimeInNano() - start;
sum += diff;
- printf("----runner in %ldns\n", diff);
- printf("ran sucessfully = %s\n", ranSuccess ? "true" : "false");
- printf("----sum %ldns\n", sum);
- deleteInstructions(instructions);
+ if (parsedTree != NULL) {
+ printParsedTreeNode(parsedTree);
+ fprintf(stderr, "----tree parsing in %ldns\n", diff);
+ start = getTimeInNano();
+ Instructions instructions = _codeGenerator(parsedTree, code);
+ diff = getTimeInNano() - start;
+ sum += diff;
+ if (instructions.size != ERROR_SIZE) {
+ printInstructions(instructions);
+ fprintf(stderr, "----code_generator in %ldns\n", diff);
+ start = getTimeInNano();
+ bool ranSuccess = _runner(instructions);
+ diff = getTimeInNano() - start;
+ sum += diff;
+ fprintf(stderr, "----runner in %ldns\n", diff);
+ fprintf(stderr, "ran sucessfully = %s\n",
+ ranSuccess ? "true" : "false");
+ fprintf(stderr, "----sum %ldns\n", sum);
+ deleteInstructions(instructions);
+ } else {
+ fprintf(stderr, "----returned error");
+ }
+ deleteParsedTree(parsedTree);
+ } else {
+ fprintf(stderr, "----returned error");
+ }
+ deleteParsedNode(parsedNode);
+ } else {
+ fprintf(stderr, "----returned error");
}
- deleteParsedNode(parsedNode);
+ } else {
+ fprintf(stderr, "----returned error");
}
deleteNodes(nodes);
return sum;
@@ -66,7 +74,7 @@ Clock process() {
Clock sumAll = 0;
for (size_t i = 0; i < sizeof(codes) / sizeof(char *); ++i) {
Clock start = getTimeInNano();
- run(codes[i]);
+ runWithPrint(codes[i]);
sumAll += getTimeInNano() - start;
}
return sumAll;
@@ -74,7 +82,7 @@ Clock process() {
void runBenchmark() {
Clock sum = 0;
- const int times = 10000;
+ const int times = 100;
for (int i = 0; i < times; ++i) {
sum += process();
}
@@ -88,7 +96,23 @@ int main(int argc, char *argv[]) {
return 1;
}
char *code = read_whole_file(argv[1]);
- const bool ret = run(code);
+ if (code == NULL) {
+ return 1;
+ }
+ char *import = read_whole_file("stdlib/builtins.felan");
+ if (import == NULL) {
+ return 1;
+ }
+ char *lastCode = code;
+ code = a404m_malloc(strlen(code) + strlen(import) + 2);
+ strcpy(code, import);
+ strcat(code, "\n");
+ strcat(code, lastCode);
+ free(lastCode);
+ free(import);
+
+ bool ret = runner(code);
+
free(code);
if (ret) {
return 0;