From 3dc3af8eba15efcbf0b2aa5889a091eb1722d07f Mon Sep 17 00:00:00 2001 From: german Date: Thu, 5 Mar 2026 17:03:22 +0400 Subject: [PATCH] Arguments parser rewrite --- .vscode/launch.json | 28 ++++++++++++++++- .vscode/out.exe | 0 asm-savers.h | 72 ++++++++++++++++++++++++++++++++++++++++---- ntsys | Bin 26864 -> 27008 bytes ntsys-assembler.h | 15 +++++++-- 5 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 .vscode/out.exe diff --git a/.vscode/launch.json b/.vscode/launch.json index 655f330..a8d54f5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,5 +3,31 @@ // Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов. // Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", - "configurations": [] + "configurations": [ + { + "name": "Запустить", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/ntsys", + "args": ["--asm", "${workspaceFolder}/example.asm"], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": true, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Включить автоматическое форматирование для gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Задать для варианта приложения дизассемблирования значение Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + + ] } \ No newline at end of file diff --git a/.vscode/out.exe b/.vscode/out.exe new file mode 100644 index 0000000..e69de29 diff --git a/asm-savers.h b/asm-savers.h index 1c3c17b..eb7fc80 100644 --- a/asm-savers.h +++ b/asm-savers.h @@ -1,7 +1,8 @@ #if (!defined(NTSYS__S_ASSEMBLER_H___)) #define NTSYS__S_ASSEMBLER_H___ -#define create_ntsys_asm_parser(cache, fp, str, table) ((ntsys_argument_parser_t){(cache), (fp), (str), (table)}) +#define ntsys_run_asm_parser(ss) __ntsys_arg_function_loader(&(ss)) +#define create_ntsys_asm_parser(cache, fp, str, table, table_size, labels) ((ntsys_argument_parser_t){(cache), (fp), (str), (table), (table_size), (labels), (labels)}) #define create_ntsys_asm_save(ss) ((ntsys_asm_save_t){(ss), (ss)}) #define create_ntsys_asm_cache(ss) ((ntsys_asm_cache_t)&(ss)) #define ntsys_asm_arg_new(str, __cache) ((ntsys_get_arg((__cache))) && ((str) = __cache->string)) @@ -83,7 +84,7 @@ char* ntsys_get_arg(ntsys_asm_cache_t save) { save->cache = &str[n_p + 1]; str[n_p] = '\0'; } - if (strlen(str) == 1 || strlen(str) == 0) { + if (strlen(str) == 0) { str = NULL; save->string = NULL; return NULL; @@ -126,17 +127,76 @@ char* ntsys_get_arg(ntsys_asm_cache_t save) { return str; } +typedef char** ntsys_labels_array_t; typedef struct { ntsys_asm_cache_t cache; FILE* fp; char* string; char** table; + size_t table_length; + char** labels; } ntsys_argument_parser_t; -int ntsys_run_asm_parser(ntsys_argument_parser_t parser) { - char* str = parser.string; - while (ntsys_asm_arg_new(str, parser.cache)) { - puts(str); +static void __input_datatype(ntsys_argument_parser_t* parser, byte_t* mode) { + +} + +static void __input_data(ntsys_argument_parser_t* parser, byte_t* mode) { + +} + +static int __arg_writer(char* str, ntsys_argument_parser_t* parser, byte_t mode) { + if (str[0] == ':') { + if (str[1] == 'T') { + __input_datatype(parser, &mode); + } else if (str[1] == 'D') { + __input_data(parser, &mode); + } + } else { + byte_t x = strtol(str, NULL, 16); + fputc((char)x, parser->fp); + } + return EXIT_SUCCESS; +} + +static int select_argument(char* str, ntsys_argument_parser_t* parser) { + size_t i = 0; + char buf[64]; + char** table = parser->table; + while (i < parser->table_length) { + size_t t = 0; + while (t < strlen(table[i])) { + if (table[i][t] == '=') break; + t ++; + } + strncpy(buf, table[i], t); + buf[t] = '\0'; + if (strcmp(str, buf) == 0) { + char* se = &table[i][t + 1]; + byte_t internal = 0x00; + while (strlen(se) > 1) { + char is[3]; + strncpy(is, se, 2); + is[2] = '\0'; + if (__arg_writer(is, parser, internal) == EXIT_FAILURE) { + ntsys_error("Internal program error!"); + return EXIT_FAILURE; + } + se += sizeof(char) * 2; + } + return EXIT_SUCCESS; + } + i ++; + } + ntsys_error("Undefined operator!"); + /* Обязательно заменить на EXIT_FAILURE! EXIT_SUCCESS нужен для отладки! */ + return EXIT_SUCCESS; +} + +int __ntsys_arg_function_loader(ntsys_argument_parser_t* parser) { + char* str = parser->string; + while (ntsys_asm_arg_new(str, parser->cache)) { + if (select_argument(str, parser) == EXIT_FAILURE) return EXIT_FAILURE; } return EXIT_SUCCESS; } diff --git a/ntsys b/ntsys index abfa6f649fa6501bd09e93b0e0304511873f8e4a..56fdf2d1868345c4f3fa19ffa8773169e64548c3 100755 GIT binary patch delta 10311 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 YAggME<#L6)hi!)R`&vaxLXuMc7p9wgg8%>k delta 9692 zcmaJ{e_T{$x<6;&g&Aa+8DSiT!~p?8PyvO&1e?)O4>}qurmLB-B5GM{ihHY1DL^%MUE~`?m+4%Ds=4{IqQfRlRW)h8hWt(ObK5Yls`Vh34GU6>HQ!>*SI2gP>fO#w z5x+|K?;lqClgj3Gzq_|Qb;MiKQd{2tc0PYTBFi}dULyXZ6z>+HUbG6tCGyWA#*2?| zTcm@Xhn~WB7~**%OXT&xjN}hRCWssO6OjwVP2}+cOB4f&>zy9gFTwqRINr?i#Mej? zXDOwbce7k^8c&UKuxH>uSP5MoRl|=&&E|un8wUvnAp%($w7LcYr~7^UWD+8rmspOe}ixuI$ipZ8C6v%k5>h^Hl#Xl z)p%p2z!w@boH-uNuTn+buadVI9Zn%ZWy||m^Z0RC>xZh=%0AX+E}9(9Et++CAM19W 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 Ut8!^Pb!m|)zEahaFi5Wd1K693xBvhE diff --git a/ntsys-assembler.h b/ntsys-assembler.h index 39ace16..e7ea542 100644 --- a/ntsys-assembler.h +++ b/ntsys-assembler.h @@ -5,15 +5,24 @@ #include "asm-savers.h" +/* + * :T - тип данных + * :D - данные + * XX - шестнадцатиричные данные + */ + +const size_t ntsys_command_count = 1; + char* ntsys_asm_table[] = { - "print" + "push=00:T:D" }; int ntsys_asm_from_string(size_t* mempos, char* str, FILE* fp) { + ntsys_labels_array_t labels = NULL; ntsys_asm_save_t __save = create_ntsys_asm_save(str); ntsys_asm_cache_t __cache = create_ntsys_asm_cache(__save); - ntsys_argument_parser_t __parser = create_ntsys_asm_parser(__cache, fp, str, ntsys_asm_table); - return ntsys_run_asm_parser(__parser); + ntsys_argument_parser_t parser = create_ntsys_asm_parser(__cache, fp, str, ntsys_asm_table, ntsys_command_count, labels); + return ntsys_run_asm_parser(parser); } int ntsys_compile_asm(char* filename, char* asm_out) {