From f3cb1d5858aca4cff58395deb8e463ddcd4d93bb Mon Sep 17 00:00:00 2001 From: Victor Vobis Date: Wed, 30 Apr 2025 18:33:40 +0200 Subject: [PATCH] simple vector type --- .nfs00000000113621d400000ffd | Bin 0 -> 32968 bytes .project.gf | 5 +- Makefile | 74 +++++---- a.out | Bin 0 -> 7168 bytes src/core/mem/memcpy.s | 18 +++ src/core/vector/vec_create.s | 41 +++++ src/core/vector/vec_get.s | 36 +++++ src/core/vector/vec_push.s | 65 ++++++++ src/core/vector/vector.inc | 13 ++ src/global/function_table.s | 16 ++ src/global/regs.s | 6 + src/inc/function_table.s | 7 + src/inc/regs.s | 3 - src/{parse => lexer}/lex_err.s | 0 src/lexer/lex_func.s | 150 ++++++++++++++++++ src/{parse => lexer}/lex_load.s | 22 ++- src/{parse => lexer}/lexer.s | 29 ++-- src/{parse => lexer}/vars/get_vars.s | 2 +- src/{parse => lexer}/vars/insert_var.s | 40 ++++- .../{ => expression}/create_expressions.s | 0 src/parse/{ => expression}/debug_expression.s | 0 src/parse/{ => token}/debug_token.s | 0 src/parse/{parse.s => token/parse_tokens.s} | 11 +- src/parse/tokenizer.s | 33 ++++ src/start.s | 87 ++++++---- test.c | 27 +++- test.lang | 1 + test.s | 24 +++ 28 files changed, 596 insertions(+), 114 deletions(-) create mode 100755 .nfs00000000113621d400000ffd create mode 100755 a.out create mode 100644 src/core/mem/memcpy.s create mode 100644 src/core/vector/vec_create.s create mode 100644 src/core/vector/vec_get.s create mode 100644 src/core/vector/vec_push.s create mode 100644 src/core/vector/vector.inc create mode 100644 src/global/function_table.s create mode 100644 src/global/regs.s create mode 100644 src/inc/function_table.s delete mode 100644 src/inc/regs.s rename src/{parse => lexer}/lex_err.s (100%) create mode 100644 src/lexer/lex_func.s rename src/{parse => lexer}/lex_load.s (93%) rename src/{parse => lexer}/lexer.s (82%) rename src/{parse => lexer}/vars/get_vars.s (98%) rename src/{parse => lexer}/vars/insert_var.s (86%) rename src/parse/{ => expression}/create_expressions.s (100%) rename src/parse/{ => expression}/debug_expression.s (100%) rename src/parse/{ => token}/debug_token.s (100%) rename src/parse/{parse.s => token/parse_tokens.s} (96%) create mode 100644 src/parse/tokenizer.s create mode 100644 test.s diff --git a/.nfs00000000113621d400000ffd b/.nfs00000000113621d400000ffd new file mode 100755 index 0000000000000000000000000000000000000000..c7bbbcd1e55fadd33b4e8eb5ad167e0b84223e4f GIT binary patch literal 32968 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 Pv|H!8Au}_=X8!*H)LHUf literal 0 HcmV?d00001 diff --git a/.project.gf b/.project.gf index 32aed5c..667b6ca 100644 --- a/.project.gf +++ b/.project.gf @@ -1,3 +1,4 @@ [executable] -path=/home/victor/git/lang/debug -arguments=/home/victor/git/lang/test.lang +path=/sgoinfre/vvobis/git/personal/lang/debug +arguments=/sgoinfre/vvobis/git/personal/lang/test.lang +ask_directory=1 diff --git a/Makefile b/Makefile index cea7a24..4fb3237 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,18 @@ SRCDIR := src COREDIR := $(SRCDIR)/core MATHDIR := $(COREDIR)/math +VECDIR := $(COREDIR)/vector STRDIR := $(COREDIR)/string PRINTDIR := $(COREDIR)/print MEMDIR := $(COREDIR)/mem SYSCALLDIR := $(COREDIR)/syscall FILEDIR := $(COREDIR)/file PARSEDIR := $(SRCDIR)/parse -VARDIR := $(PARSEDIR)/vars +EXPRDIR := $(PARSEDIR)/expression +TOKDIR := $(PARSEDIR)/token +LEXDIR := $(SRCDIR)/lexer +VARDIR := $(LEXDIR)/vars +GLOBALDIR := $(SRCDIR)/global # Define source files MATHSRC := $(addprefix $(MATHDIR)/, $(addsuffix .s, \ @@ -17,7 +22,10 @@ STRSRC := $(addprefix $(STRDIR)/, $(addsuffix .s, \ strlen split strcpy substr is_num strcmp is_alpha \ )) MEMSRC := $(addprefix $(MEMDIR)/, $(addsuffix .s, \ - malloc memchr \ + malloc memchr memcpy \ + )) +VECSRC := $(addprefix $(VECDIR)/, $(addsuffix .s, \ + vec_create vec_push vec_get\ )) PRINTSRC := $(addprefix $(PRINTDIR)/, $(addsuffix .s, \ print putnumber \ @@ -28,55 +36,45 @@ FILESRC := $(addprefix $(FILEDIR)/, $(addsuffix .s, \ SYSCALLSRC := $(addprefix $(SYSCALLDIR)/, $(addsuffix .s, \ exit file_ops syscall_err\ )) -PARSESRC := $(addprefix $(PARSEDIR)/, $(addsuffix .s, \ - parse debug_token create_expressions debug_expression \ - lexer lex_load lex_err \ +TOKSRC := $(addprefix $(TOKDIR)/, $(addsuffix .s, \ + parse_tokens debug_token \ + )) +EXPRSRC := $(addprefix $(EXPRDIR)/, $(addsuffix .s, \ + create_expressions debug_expression \ + )) +LEXSRC := $(addprefix $(LEXDIR)/, $(addsuffix .s, \ + lexer lex_err lex_load lex_func \ )) - VARSRC := $(addprefix $(VARDIR)/, $(addsuffix .s, \ - get_vars insert_var \ + get_vars insert_var \ + )) +GLOBALSRC := $(addprefix $(GLOBALDIR)/, $(addsuffix .s, \ + function_table regs \ )) -# Collect all source files - now using the file variables, not directory variables -SRC := $(SRCDIR)/start.s $(MATHSRC) $(STRSRC) $(PRINTSRC) $(FILESRC) $(VARSRC) $(PARSESRC) $(SYSCALLSRC) $(MEMSRC) +# Collect all source files +SRC := $(SRCDIR)/start.s $(MATHSRC) $(STRSRC) $(PRINTSRC) $(FILESRC) $(VARSRC) $(SYSCALLSRC) $(MEMSRC) $(TOKSRC) $(EXPRSRC) $(LEXSRC) $(GLOBALSRC) $(VECSRC) +# Fix: Preserve directory structure in object files OBJDIR := obj -OBJ := $(patsubst %.s,$(OBJDIR)/%.o,$(notdir $(SRC))) +OBJ := $(patsubst $(SRCDIR)/%.s,$(OBJDIR)/%.o,$(SRC)) all: debug -debug: $(OBJDIR) $(OBJ) - ld -o $@ $(OBJ) -nostdlib -static +# Create output directories +$(OBJDIR)/core/math $(OBJDIR)/core/string $(OBJDIR)/core/print $(OBJDIR)/core/mem $(OBJDIR)/core/syscall $(OBJDIR)/core/file $(OBJDIR)/parse/expression $(OBJDIR)/parse/token $(OBJDIR)/lexer $(OBJDIR)/lexer/vars $(OBJDIR)/global: + mkdir -p $@ -# Pattern rules for object files - added the missing rules for string and print +# Main target +debug: $(OBJDIR) $(OBJDIR)/core/math $(OBJDIR)/core/string $(OBJDIR)/core/print $(OBJDIR)/core/mem $(OBJDIR)/core/syscall $(OBJDIR)/core/file $(OBJDIR)/parse/expression $(OBJDIR)/parse/token $(OBJDIR)/lexer $(OBJDIR)/lexer/vars $(OBJDIR)/global $(OBJ) + ld -g -o $@ $(OBJ) -nostdlib -static + +# Fix: Use a more specific pattern rule that preserves paths $(OBJDIR)/%.o: $(SRCDIR)/%.s + mkdir -p $(dir $@) nasm -felf64 -F dwarf -g $< -o $@ -$(OBJDIR)/%.o: $(MATHDIR)/%.s - nasm -felf64 -F dwarf -g $< -o $@ - -$(OBJDIR)/%.o: $(STRDIR)/%.s - nasm -felf64 -F dwarf -g $< -o $@ - -$(OBJDIR)/%.o: $(MEMDIR)/%.s - nasm -felf64 -F dwarf -g $< -o $@ - -$(OBJDIR)/%.o: $(SYSCALLDIR)/%.s - nasm -felf64 -F dwarf -g $< -o $@ - -$(OBJDIR)/%.o: $(PRINTDIR)/%.s - nasm -felf64 -F dwarf -g $< -o $@ - -$(OBJDIR)/%.o: $(FILEDIR)/%.s - nasm -felf64 -F dwarf -g $< -o $@ - -$(OBJDIR)/%.o: $(PARSEDIR)/%.s - nasm -felf64 -F dwarf -g $< -o $@ - -$(OBJDIR)/%.o: $(VARDIR)/%.s - nasm -felf64 -F dwarf -g $< -o $@ - -$(OBJDIR): +$(OBJDIR): mkdir -p $@ clean: diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..9eeb248548162cae9ff37ac6852303a29bc1257d GIT binary patch literal 7168 zcmeHMO>7%Q6n<+b=_aVyDOK81m2@$10&iRpLRGdgYJvtFDn%7U8&p|#ym5^jJKEiZ zB7vx6B)SA~;fg@w%mHyK1*tBM6p%PnrBY9DC@L~a5A6Y!suJeSpY4vFs+G!ZC*3zQ z-~0Jy-ptOryC2NVz7o+ikR<{~fc4^O25|{c-zO~q((n>QP!5C6YzI0jY)KDZees8cVV9X#kS? znbfAh-#b6MzGF7noNLaag`Fj}O`WtZY+WV6PmQzmKl8D{1|>?LnS6=_f1abzc`BN} zw^}Vy+lV)sUt*U8Ka${IuGv6Mqj?SG`4MXQ1MM#*W8)uU43ix-Zrvfl=GGr7bmiOx)oNGfnkO)TOHV;1AN-{f)D;8_!~Z2ws5iLs${-G7j@zkL30h#JPQ1*ts2ecvRTemiY6R;`S|Mx4<%DCCMTW;?Q}#2Wbvu^2(Ks{K&fkT=HCi7x_3Nx(Oj$| z$BJ93V0bF;k6ZEV8H!{>5?BJSmd(9imFWl~up8x}101hcg_>$j5^6 zW4xj;k5bp*4WvB9hgAu+x$&rNZ(P*Riw@Zr;MfLsq)B0oh zwl0!{Q7t`$CjXO?unde-0`1PDJ5jP%lQ?&+vkTb>hua%#k6~r34E=}2$k>KuL^Sj) zu~^Ubjn&TN-Fr+#mir_+tR2aihGiMHVPvccD`A@nWU_5LlUT58 z1fkps`!HO>n6enDZCNSHLTOWeilq#TksU*~D46#qQ}>9VlFK}1;M8zRJXcKFSI`rB z0B*KaB|TF6;RZ9*;Aq$RL7_te&nfs(fjbKRD&qa(7li#~#oibAO$Fyq3Jng3`-qvL z_zbUp@xK;vUQq1M3VcezHxQ5G?p#)Qe-Zd63jV9WFDm#|frEnoCh>!5Y<0?C*rdF2 z>qyNlfy+HC@hC1NwFf26$ToOP;9n`@*&}edk7WGL?YYgp#qPAMw^AsO zvw6?UdUumLl|s3D5|DKYIX{P0r9gd|o`=UrsQ2!&pUY$IySzRrTfTG3hh)LYuNJd8 z7oVYyC%gEpt;%*TpLd-#*(;YYVGpD1#~`?*Ko50R.lang", 0xa, 0 + section .text global _start extern exit - extern split - extern print_split - extern putchar - extern putstr - extern putnumber - extern open - extern close - extern read - extern get_file_size - extern malloc - extern lseek - extern read_file extern err_args - extern putendl - extern parse - extern print_tokens - extern err_malloc extern get_file_content - extern create_expressions + extern putstr extern lex + extern vec_create + extern vec_push + extern vec_get + extern putchar print_usage: mov rdi, usage call putstr _start: - pop rdi - cmp rdi, 2 - jne err_args - mov rdi, [rsp + 8] ; argv[1] push rbp mov rbp, rsp - sub rsp, 16 - call get_file_content + mov rdi, 1 + call vec_create mov rdi, rax - mov [rbp - 8], rax - mov rdi, rax - call lex + xor rcx, rcx + mov rbx, 95 + mov r8, ' ' - mov rsp, rbp - pop rbp +.loop: + cmp rcx, rbx + je .done + push rcx + push r8 + mov byte [rbp - 4], r8b + lea rsi, [rbp - 4] + push rdi + call vec_push + pop rdi + pop r8 + pop rcx + inc r8 + inc rcx + jmp .loop +.done: + push rdi + mov rdi, [rdi + 16] + call putstr + pop rdi + lea rsi, [rbp - 1] + mov rdx, 94 + call vec_get + test rax, rax + jz done + + mov dil, byte [rbp - 1] + call putchar + +; pop rdi +; cmp rdi, 2 +; jne err_args +; mov rdi, [rsp + 8] ; argv[1] +; push rbp +; mov rbp, rsp +; +; sub rsp, 16 +; +; call get_file_content +; mov rdi, rax +; mov [rbp - 8], rax +; +; mov rdi, rax +; call lex +; +; mov rsp, rbp +; pop rbp done: xor rdi, rdi diff --git a/test.c b/test.c index aa93ac2..50090b9 100644 --- a/test.c +++ b/test.c @@ -1,11 +1,24 @@ -#include -#include -#include "../libft/libft.h" +#include int main(int argc, char **argv) { - ft_split(argv[1], *argv[2]); - for (int i = 0; i < 2; i++) - { - write(1, argv[i + 1], strlen(argv[i + 1])); + + int a = 17; + + switch (a) { + case 1: + break ; + case 2: + break ; + case 3: + break ; + case 4: + break ; + case 5: + break ; + case 6: + break ; + case 17: + a = 0xfffaaaaf; + break ; } } diff --git a/test.lang b/test.lang index d78dd3f..fe95113 100644 --- a/test.lang +++ b/test.lang @@ -1,2 +1,3 @@ a = 6 b = 5 - 2 + 6 + a +putnumber b diff --git a/test.s b/test.s new file mode 100644 index 0000000..80d874a --- /dev/null +++ b/test.s @@ -0,0 +1,24 @@ +section .text + global _start + extern putnumber + +_start: + push rbp + mov rbp, rsp + sub rsp, 16 +xor rax, rax +add rax, 6 +mov [rbp-8], rax +xor rax, rax +add rax, 5 +sub rax, 2 +add rax, 6 +add rax, [rbp-8] +mov [rbp-16], rax +push rdi +mov rdi, [rbp-16] +call putnumber +pop rdi + mov rsp, rbp + pop rbp + ret