70ab06964c
addtition: nud and led token to node distinction
...
I think i should instead have a nud and led function i guess, may do
that next
2026-05-13 16:09:03 -06:00
90c426f3a4
refactor: moved NodeResult to TreeResult
2026-05-13 12:19:17 -06:00
efa0e3bacd
refactor: evaluator incomplete.
...
SO, i forgot to implement nud and led correctly and the parser cant tell
apart from - as unary and - as binary (+ as well), i need to correct
that, move Node * to TreeResult so to use NodeResult with nud and led
2026-05-13 12:13:07 -06:00
542a94ef81
refactor: All of parser.c
...
DAMN, it wasn't that difficult, just bothers me a bit the part that
checks if both lbp and rbp of the infix are valid, like i do validation
twice but is fine i guess, maybe using an else?, i'll see if i change
it, for now i need to change the evaluator
2026-05-13 11:09:22 -06:00
80e05a9acf
refactor: changed parser.h, added Node
...
So just added node back but now clearly separated by tokens and nodes of
the AST as it should be, now real rework the mess that is the parser
2026-05-13 10:02:55 -06:00
f3373123e1
refactor: adapted lexer to work with new tokens
...
Now its fine, the code i find it clear if one just sits down to read it
for a moment, next is the parser that REALLY needs reworking and a few
helper structs.
2026-05-13 09:49:28 -06:00
2a73f5f9d6
refactor: delete ASTNode, add Token to lexer
...
So, total refactor, now we serious. I feel ASTNode was feeling very
bloated so we need to rewrite and adapt everything, by now lets get the
lexer working again, is already well written for me at least.
2026-05-13 09:37:15 -06:00
e3d64596ab
Merge pull request 'refactor-lexer' ( #11 ) from refactor-lexer into main
...
Reviewed-on: #11
2026-05-12 20:08:39 -06:00
56c80fa071
addition: Managing of parenthesis
...
Its a fucking mess, i was writting straight bullshit but it conceptually
should work, just need to refactor the shit out of it to make it way
more clean than it actually is and also later fix the fucking evaluator
like damn it sucks ASSS now (not that much really is nice but obviously
doesn't work, i like my code a lot :)
2026-05-12 20:04:41 -06:00
7f390a8c6b
addition: postfix operator capability, may work
2026-05-12 19:40:42 -06:00
e30b3d7175
addition: proccessing of prefix op
2026-05-12 18:33:52 -06:00
59f99059bb
refactor: changes and additions ot parser
2026-05-12 18:15:36 -06:00
c41847e120
refactor: rewrote tokenize and modified ohter funcs
...
Well i wanted to wildly change a lot of things about the lexer thinking
i could do something better but really all i found was automatic lexers
that at least for me don't really fit the project so a manual one it is,
i guess technically is a automata. Whatever, is good enough.
2026-04-30 21:34:27 -06:00
f2c906c6aa
initial-commit
2026-04-30 10:40:17 -06:00
fee33ff1f0
Merge pull request 'refactor-generic-array' ( #9 ) from refactor-generic-array into main
...
Reviewed-on: #9
all gut
2026-04-30 10:05:21 -06:00
ac2e783ccc
fix: tests and implementation of lexer
...
Just a few details here and there, nothing wrong, everything else is
going well.
2026-04-30 09:58:27 -06:00
630d9f53e1
test: changed lexer tests
2026-04-24 09:36:03 -06:00
b7e1cdf3a6
refactor: made parser work with arrayslices and new result types
2026-04-24 09:06:47 -06:00
cef046f7db
refactor: changed string to int adn tokenize number
2026-04-24 08:09:31 -06:00
19c84c382b
refactor: changed funtions definitions, modified tokenize
2026-04-24 07:17:35 -06:00
855d683005
addition: Resul structs for rework
2026-04-24 07:02:00 -06:00
576bcd9504
addition: starting to refactor NodeArray into ArrayList
2026-04-23 15:37:16 -06:00
e6420cb1c9
add/fix: Added arena implementation and cmake rework
2026-04-23 12:39:04 -06:00
f50546bd07
Merge pull request 'feature-AST-using-arena' ( #8 ) from feature-AST-using-arena into main
...
Reviewed-on: #8
2026-04-23 12:34:30 -06:00
c99f307827
Merge pull request 'feature-AST-using-arena' ( #5 ) from feature-AST-using-arena into main
...
Reviewed-on: #5
2026-04-13 08:58:47 -06:00
7ad4eba123
fix/refactor: Modified evaluate and changed it to evaluate_tree
...
So i did what the last commit said, also fixed parse_expr because it was
still using malloc for allocating new nodes so i made it use arena_alloc
like it should, did the very first tests so it's all good, i think is
readdy to merge.
2026-04-13 08:44:30 -06:00
e4ec102cb9
rework: AST now uses an arena for allocation
...
For now it works but i dont really like that i use ParseResult, i mean
is necessary but i think i will try to make it cleaner so that i can
just directly use like parse and pass tath into evaluate, that would
require to move the main evaluate funciton into evaluate_tree or
something and evaluate takes the arena, uses evaluate_tree and frees
the arena, will try that the next commit but for now this version works
perfectly.
2026-04-13 07:57:36 -06:00
fb27e1e34c
addition: added arena library to this shit
2026-04-13 06:40:31 -06:00
ef8cf84456
addition: added arena library
2026-04-11 22:41:19 -06:00
a486ed62f4
Rework: moved ASTNodeArray logic to it's own c file
2026-03-26 10:01:17 -06:00
4cddb24405
Changed evaluate function to free the memory it uses, temporary, will be changed to use a sigle arena for the tree
2026-03-26 09:25:40 -06:00
1ce64d8e9e
Fixed many minor things, tested it on main and is amazing, i think i need to start adding fractions next so further testing can be done with more powerful operators
2026-03-25 12:25:15 -06:00
92d142b9cf
It works, basic but works, need to move out logic to places, like ASTNode array shouldn't be on the lexer or future logic for fractions and error handling in the evaluator. Just the things at the top of my head
2026-03-25 11:30:12 -06:00
845673fb0e
FUCK YEAH, it works, it was the is_valid thing fo slices that was inverted, did the test by brute force and damn, is the expected AST
2026-03-25 10:22:54 -06:00
f24671bd19
well, nothing works, at least there is something to debug
2026-03-25 07:43:00 -06:00
f11b6f8c12
print funtion added, not tested
2026-03-25 06:59:52 -06:00
17be815ed0
Done with helpers, need some function to actually print the tree and see for myself if it works wit simple symbols
2026-03-24 21:51:28 -06:00
7d28b69790
added parse, just need a few more helper funtions to start testing some things
2026-03-24 21:44:08 -06:00
0d883ae978
WOW, finally making some sense, i think i get it, finally got the skelleton, gonna keep reading for adding more interesting things and doing things right, for now i think i got the parse_expr
2026-03-24 21:36:14 -06:00
acd5e9781e
DAMN, i still don't get it, i really don't want to ask some AI to do it but damn, i'm finding it REALLY difficult, is like the 4th article i read, i hope this is the one and that i can get going for fucks sake
2026-03-24 21:04:36 -06:00
27787308f2
Read a pratt parsing article, i think i can do it, got nud and led the right way i think
2026-03-24 11:19:47 -06:00
6377515558
Starting with the lexer, i'm starting to comprehend better what pratt parsing is and how to apply it. For now just declaring basic structure and functions
2026-03-13 07:58:38 -06:00
903fdbd6ff
I think i'm done, lexer works fine and errors work fine too, amazing actually, should be moving on to the parser so that i can construct the expression tree
2026-03-10 07:27:35 -06:00
73451fcca9
Damn, it works, the lexer actually works, that's amazing, need to test the bad cases but at least i'm sure it can detect and process correct math expressions
2026-03-10 07:08:12 -06:00
0de6cf5024
Modified the structure of the lexer, now is more easy to add types of numbers like fractions, like i could enev consider roots, irrationals, complex or imaginary, that would be dope. For now only support for integer, we need to get this shit running
2026-03-09 11:58:55 -06:00
afae8fbe3a
Made the arrangements for the mentioned changes in the last commit, for now just integers but IT WILL be capable of handling doubles as fractions
2026-03-09 09:23:06 -06:00
771069455d
First version for string_to_number, just one test, is working fine, i'm considering swithching to handling only integers for in the future to manage in special struct that manages doubles as fractions, obviously this will mean changing nodes for general numbers to integers/fractions and shit
2026-03-09 09:06:06 -06:00
194f1dd80f
Second test, just pop, almost identical to first put important for asserting pop works because it is very needed
2026-03-05 10:20:44 -06:00
79f7e327ff
First test added, changed signature for using pointers beacause i forgot you can't actually change a parameter because c copies everything, stupid from me to forget that
2026-03-05 08:27:36 -06:00
3126be5782
Added functionality for the basic array functionality, i'm going to make tests even thoug they are tedius as fuck, i'm way more interested in making tests for the lexer itself
2026-03-04 19:30:56 -06:00