From 7a8b8ff4bee2373e1e0f3b2b1837dc25041e1a1d Mon Sep 17 00:00:00 2001 From: A404M Date: Mon, 27 Jan 2025 16:10:47 +0330 Subject: clean up removed print hello world --- src/compiler/ast-tree.c | 16 ++++++++-------- src/compiler/ast-tree.h | 7 ++++--- src/compiler/code-generator.c | 24 +++++++----------------- src/compiler/code-generator.h | 1 - src/compiler/lexer.c | 4 ---- src/compiler/lexer.h | 1 - src/compiler/parser.c | 15 --------------- src/compiler/parser.h | 2 -- 8 files changed, 19 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/compiler/ast-tree.c b/src/compiler/ast-tree.c index 22ce146..a132840 100644 --- a/src/compiler/ast-tree.c +++ b/src/compiler/ast-tree.c @@ -8,7 +8,7 @@ const char *AST_TREE_TOKEN_STRINGS[] = { "AST_TREE_TOKEN_FUNCTION", - "AST_TREE_TOKEN_KEYWORD_PRINT", + "AST_TREE_TOKEN_KEYWORD_PRINT_U64", "AST_TREE_TOKEN_NONE", @@ -60,7 +60,6 @@ void astTreePrint(const AstTree *tree, int indent) { printf("]"); } goto RETURN_SUCCESS; - case AST_TREE_TOKEN_KEYWORD_PRINT: case AST_TREE_TOKEN_TYPE_VOID: goto RETURN_SUCCESS; case AST_TREE_TOKEN_KEYWORD_PRINT_U64: { @@ -160,7 +159,6 @@ void astTreeDestroy(AstTree tree) { free(metadata); } return; - case AST_TREE_TOKEN_KEYWORD_PRINT: case AST_TREE_TOKEN_TYPE_VOID: case AST_TREE_TOKEN_VALUE_U64: return; @@ -333,8 +331,6 @@ AstTreeVariable *getVariable(AstTreeVariables *variables, size_t variables_size, AstTree *astTreeParse(ParserNode *parserNode, AstTreeVariables *variables, size_t variables_size) { switch (parserNode->token) { - case PARSER_TOKEN_KEYWORD_PRINT: - return newAstTree(AST_TREE_TOKEN_KEYWORD_PRINT, NULL); case PARSER_TOKEN_FUNCTION_DEFINITION: return astTreeParseFunction(parserNode, variables, variables_size); case PARSER_TOKEN_TYPE_FUNCTION: @@ -594,7 +590,8 @@ bool hasTypeOf(AstTree *value, AstTree *type) { } return typeIsEqual(typeMetadata->returnType, valueMetadata->returnType); } - case AST_TREE_TOKEN_KEYWORD_PRINT: + case AST_TREE_TOKEN_KEYWORD_PRINT_U64: + case AST_TREE_TOKEN_VALUE_U64: case AST_TREE_TOKEN_TYPE_FUNCTION: case AST_TREE_TOKEN_TYPE_VOID: case AST_TREE_TOKEN_FUNCTION_CALL: @@ -604,10 +601,11 @@ bool hasTypeOf(AstTree *value, AstTree *type) { } goto ERROR; case AST_TREE_TOKEN_FUNCTION: - case AST_TREE_TOKEN_KEYWORD_PRINT: case AST_TREE_TOKEN_TYPE_VOID: case AST_TREE_TOKEN_FUNCTION_CALL: case AST_TREE_TOKEN_IDENTIFIER: + case AST_TREE_TOKEN_KEYWORD_PRINT_U64: + case AST_TREE_TOKEN_VALUE_U64: return false; case AST_TREE_TOKEN_NONE: } @@ -619,7 +617,8 @@ ERROR: bool typeIsEqual(AstTree *type0, AstTree *type1) { switch (type0->token) { case AST_TREE_TOKEN_FUNCTION: - case AST_TREE_TOKEN_KEYWORD_PRINT: + case AST_TREE_TOKEN_KEYWORD_PRINT_U64: + case AST_TREE_TOKEN_VALUE_U64: return false; case AST_TREE_TOKEN_TYPE_VOID: return type1->token == AST_TREE_TOKEN_TYPE_VOID; @@ -636,6 +635,7 @@ bool typeIsEqual(AstTree *type0, AstTree *type1) { return type1->token == AST_TREE_TOKEN_IDENTIFIER && type0->metadata == type1->metadata; case AST_TREE_TOKEN_NONE: + break; } printLog("Bad token '%d'", type0->token); exit(1); diff --git a/src/compiler/ast-tree.h b/src/compiler/ast-tree.h index 8a7617d..a557a1f 100644 --- a/src/compiler/ast-tree.h +++ b/src/compiler/ast-tree.h @@ -6,8 +6,9 @@ typedef enum AstTreeToken { AST_TREE_TOKEN_FUNCTION, - AST_TREE_TOKEN_KEYWORD_PRINT, + AST_TREE_TOKEN_KEYWORD_PRINT_U64, + AST_TREE_TOKEN_TYPE_FUNCTION, AST_TREE_TOKEN_TYPE_VOID, AST_TREE_TOKEN_FUNCTION_CALL, @@ -108,8 +109,8 @@ AstTree *astTreeParseIdentifier(ParserNode *parserNode, size_t variables_size); AstTree *astTreeParsePrintU64(ParserNode *parserNode, - AstTreeVariables *variables, - size_t variables_size); + AstTreeVariables *variables, + size_t variables_size); bool hasTypeOf(AstTree *value, AstTree *type); bool typeIsEqual(AstTree *type0, AstTree *type1); diff --git a/src/compiler/code-generator.c b/src/compiler/code-generator.c index fb843d0..abe65f8 100644 --- a/src/compiler/code-generator.c +++ b/src/compiler/code-generator.c @@ -12,7 +12,6 @@ void codeGeneratorDelete(CodeGeneratorCodes *code) { for (size_t i = 0; i < code->codes_size; ++i) { CodeGeneratorCode current = code->codes[i]; switch (current.instruction) { - case CODE_GENERATOR_INSTRUCTION_PRINT: case CODE_GENERATOR_INSTRUCTION_PRINT_U64: case CODE_GENERATOR_INSTRUCTION_RET: continue; @@ -78,10 +77,14 @@ CodeGeneratorCodes *codeGenerator(AstTreeRoot *astTreeRoot) { return NULL; } continue; - case AST_TREE_TOKEN_KEYWORD_PRINT: case AST_TREE_TOKEN_TYPE_FUNCTION: case AST_TREE_TOKEN_TYPE_VOID: + case AST_TREE_TOKEN_VALUE_U64: + case AST_TREE_TOKEN_IDENTIFIER: + case AST_TREE_TOKEN_KEYWORD_PRINT_U64: + case AST_TREE_TOKEN_FUNCTION_CALL: case AST_TREE_TOKEN_NONE: + break; } printLog("Bad token %d", variable->value->token); return NULL; @@ -98,11 +101,6 @@ bool codeGeneratorAstTreeFunction(char *label_begin, char *label_end, for (size_t i = 0; i < scope.expressions_size; ++i) { AstTree tree = scope.expressions[i]; switch (tree.token) { - case AST_TREE_TOKEN_KEYWORD_PRINT: - generateCodePushCode( - codes, createGenerateCode(label_begin, label_end, - CODE_GENERATOR_INSTRUCTION_PRINT, NULL)); - goto OK; case AST_TREE_TOKEN_FUNCTION_CALL: { AstTreeFunctionCall *metadata = tree.metadata; AstTree *function = metadata->function; @@ -161,15 +159,13 @@ bool codeGeneratorAstTreeFunction(char *label_begin, char *label_end, static const char TEMPLATE[] = "format ELF64 executable 3\n\nSYS_exit = 60\nSYS_write = 1\nSTDOUT = " - "1\n\nsegment readable writable\nhello: db \"Hello, " - "World!\",0xa\nhello_len = $-hello\n\nsegment readable executable\nentry " - "_start\n\nprint:\nmov rax, SYS_write\nmov rdi, STDOUT\nmov rsi, " - "hello\nmov rdx, hello_len\nsyscall\nret\n\n; rdi = the " + "1\n\nsegment readable executable\nentry _start\n\n; rdi = the " "number\nprint_u64:\nmov rcx, rsp\nmov rax, rdi\nmov rbx, 10\n\n.L:\nxor " "rdx, rdx\ndiv rbx\nadd dl, '0'\ndec rcx\nmov [rcx],dl\ncmp rax, 0\njnz " ".L\n\nmov rax, SYS_write\nmov rdi, STDOUT\nmov rsi, rcx\n\nmov rdx, " "rsp\nsub rdx, rcx\n\nsyscall\nret\n\n_start:\ncall main\nmov rax, " "SYS_exit\nxor rdi,rdi\nsyscall\n"; + static const size_t TEMPLATE_LEN = sizeof(TEMPLATE) / sizeof(*TEMPLATE) - sizeof(*TEMPLATE); @@ -205,12 +201,6 @@ char *codeGeneratorToFlatASM(const CodeGeneratorCodes *codes) { } switch (code.instruction) { - case CODE_GENERATOR_INSTRUCTION_PRINT: { - constexpr char INST[] = "call print\n"; - codeGeneratorAppendFlatASMCommand(&fasm, &fasm_size, &fasm_inserted, INST, - strlen(INST)); - } - continue; case CODE_GENERATOR_INSTRUCTION_PRINT_U64: { CodeGeneratorOperandU64 metadata = (CodeGeneratorOperandU64)code.metadata; char *inst; diff --git a/src/compiler/code-generator.h b/src/compiler/code-generator.h index ace6e97..03415a4 100644 --- a/src/compiler/code-generator.h +++ b/src/compiler/code-generator.h @@ -5,7 +5,6 @@ #include typedef enum CodeGeneratorInstruction : uint8_t { - CODE_GENERATOR_INSTRUCTION_PRINT, CODE_GENERATOR_INSTRUCTION_PRINT_U64, CODE_GENERATOR_INSTRUCTION_CALL, CODE_GENERATOR_INSTRUCTION_RET, diff --git a/src/compiler/lexer.c b/src/compiler/lexer.c index 8b8b6bb..322d65a 100644 --- a/src/compiler/lexer.c +++ b/src/compiler/lexer.c @@ -11,7 +11,6 @@ const char *LEXER_TOKEN_STRINGS[] = { "LEXER_TOKEN_IDENTIFIER", "LEXER_TOKEN_KEYWORD_VOID", - "LEXER_TOKEN_KEYWORD_PRINT", "LEXER_TOKEN_KEYWORD_PRINT_U64", "LEXER_TOKEN_NUMBER", @@ -47,12 +46,10 @@ const size_t LEXER_SYMBOL_SIZE = const char *LEXER_KEYWORD_STRINGS[] = { "void", - "print", "print_u64", }; const LexerToken LEXER_KEYWORD_TOKENS[] = { LEXER_TOKEN_KEYWORD_VOID, - LEXER_TOKEN_KEYWORD_PRINT, LEXER_TOKEN_KEYWORD_PRINT_U64, }; const size_t LEXER_KEYWORD_SIZE = @@ -171,7 +168,6 @@ void lexerPushClear(LexerNodeArray *array, size_t *array_size, char *iter, // goto PUSH; PUSH: case LEXER_TOKEN_KEYWORD_VOID: - case LEXER_TOKEN_KEYWORD_PRINT: case LEXER_TOKEN_KEYWORD_PRINT_U64: case LEXER_TOKEN_NUMBER: case LEXER_TOKEN_SYMBOL_EOL: diff --git a/src/compiler/lexer.h b/src/compiler/lexer.h index c3871e0..ca012c2 100644 --- a/src/compiler/lexer.h +++ b/src/compiler/lexer.h @@ -5,7 +5,6 @@ typedef enum LexerToken { LEXER_TOKEN_IDENTIFIER, LEXER_TOKEN_KEYWORD_VOID, - LEXER_TOKEN_KEYWORD_PRINT, LEXER_TOKEN_KEYWORD_PRINT_U64, LEXER_TOKEN_NUMBER, diff --git a/src/compiler/parser.c b/src/compiler/parser.c index 333d755..a42c005 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -18,7 +18,6 @@ const char *PARSER_TOKEN_STRINGS[] = { "PARSER_TOKEN_TYPE_FUNCTION", "PARSER_TOKEN_TYPE_VOID", - "PARSER_TOKEN_KEYWORD_PRINT", "PARSER_TOKEN_KEYWORD_PRINT_U64", "PARSER_TOKEN_CONSTANT", @@ -69,7 +68,6 @@ static constexpr ParserOrder PARSER_ORDER[] = { .data = { LEXER_TOKEN_SYMBOL_COLON, - LEXER_TOKEN_KEYWORD_PRINT, LEXER_TOKEN_KEYWORD_PRINT_U64, }, }, @@ -115,7 +113,6 @@ void parserNodePrint(const ParserNode *node, int indent) { goto RETURN_SUCCESS; case PARSER_TOKEN_IDENTIFIER: case PARSER_TOKEN_TYPE_VOID: - case PARSER_TOKEN_KEYWORD_PRINT: goto RETURN_SUCCESS; case PARSER_TOKEN_VALUE_U64: { ParserNodeU64Metadata metadata = (ParserNodeU64Metadata)node->metadata; @@ -244,7 +241,6 @@ void parserNodeDelete(ParserNode *node) { goto RETURN_SUCCESS; case PARSER_TOKEN_IDENTIFIER: case PARSER_TOKEN_TYPE_VOID: - case PARSER_TOKEN_KEYWORD_PRINT: case PARSER_TOKEN_VALUE_U64: goto RETURN_SUCCESS; case PARSER_TOKEN_CONSTANT: { @@ -396,8 +392,6 @@ ParserNode *parseNode(LexerNode *node, LexerNode *begin, LexerNode *end, return parserIdentifier(node, parent); case LEXER_TOKEN_KEYWORD_VOID: return parserVoid(node, parent); - case LEXER_TOKEN_KEYWORD_PRINT: - return parserPrint(node, parent); case LEXER_TOKEN_KEYWORD_PRINT_U64: return parserPrintU64(node, end, parent); case LEXER_TOKEN_SYMBOL_EOL: @@ -442,12 +436,6 @@ ParserNode *parserVoid(LexerNode *node, ParserNode *parent) { node->str_end, NULL, parent); } -ParserNode *parserPrint(LexerNode *node, ParserNode *parent) { - return node->parserNode = - newParserNode(PARSER_TOKEN_KEYWORD_PRINT, node->str_begin, - node->str_end, NULL, parent); -} - ParserNode *parserPrintU64(LexerNode *node, LexerNode *end, ParserNode *parent) { LexerNode *afterNode = node + 1; @@ -800,7 +788,6 @@ bool isExpression(ParserNode *node) { case PARSER_TOKEN_CONSTANT: case PARSER_TOKEN_SYMBOL_PARENTHESIS: case PARSER_TOKEN_FUNCTION_DEFINITION: - case PARSER_TOKEN_KEYWORD_PRINT: case PARSER_TOKEN_FUNCTION_CALL: case PARSER_TOKEN_KEYWORD_PRINT_U64: return true; @@ -827,7 +814,6 @@ bool isType(ParserNode *node) { case PARSER_TOKEN_CONSTANT: case PARSER_TOKEN_SYMBOL_PARENTHESIS: case PARSER_TOKEN_FUNCTION_DEFINITION: - case PARSER_TOKEN_KEYWORD_PRINT: case PARSER_TOKEN_ROOT: case PARSER_TOKEN_SYMBOL_EOL: case PARSER_TOKEN_SYMBOL_CURLY_BRACKET: @@ -852,7 +838,6 @@ bool isValue(ParserNode *node) { case PARSER_TOKEN_IDENTIFIER: case PARSER_TOKEN_CONSTANT: case PARSER_TOKEN_SYMBOL_PARENTHESIS: - case PARSER_TOKEN_KEYWORD_PRINT: case PARSER_TOKEN_ROOT: case PARSER_TOKEN_TYPE_FUNCTION: case PARSER_TOKEN_SYMBOL_EOL: diff --git a/src/compiler/parser.h b/src/compiler/parser.h index 974fdd5..d5b11bd 100644 --- a/src/compiler/parser.h +++ b/src/compiler/parser.h @@ -14,7 +14,6 @@ typedef enum ParserToken { PARSER_TOKEN_TYPE_FUNCTION, PARSER_TOKEN_TYPE_VOID, - PARSER_TOKEN_KEYWORD_PRINT, PARSER_TOKEN_KEYWORD_PRINT_U64, PARSER_TOKEN_CONSTANT, @@ -94,7 +93,6 @@ ParserNode *getUntilCommonParent(ParserNode *node, ParserNode *parent); ParserNode *parserIdentifier(LexerNode *node, ParserNode *parent); ParserNode *parserVoid(LexerNode *node, ParserNode *parent); -ParserNode *parserPrint(LexerNode *node, ParserNode *parent); ParserNode *parserPrintU64(LexerNode *node, LexerNode *end, ParserNode *parent); ParserNode *parserNumber(LexerNode *node, ParserNode *parent); ParserNode *parserEol(LexerNode *node, LexerNode *begin, ParserNode *parent); -- cgit v1.2.3