Note: All time is in UTC.
Week Date: 2026-01-19/2026-01-23
This week will focus on some code cleaning where it is needed, some new
mathematical operators and conditional gates. Followed by slowly introducing
the new feature of a while loop, so that Spud can become a 'Turing Complete'
language capable of simple scripting.
Monday:
- Documentation update and cleaning.
- Plan while loop node.
- Begin adding operators and/or conditional statements.
Tuesday: - Focus on programming loop. - Add more operators and conditional statements.
Wednesday: - Clean up what has been done. - Mid-week break.
Thursday:
- Finish the while loop feature.
- Finish adding operators and conditional statements.
Friday: - Clean, Refactor and do an AI sweep. - Full backup. (3-2-1)
Next Plan:
- Functions (After Loops)
2026-01-02:
- 19:18
- Initially creating the programs structure.
- 19:43
- Created the initial structure and the skeleton
for the
main.pyfile.
- Created the initial structure and the skeleton
for the
- 19:48
- The skeleton for the
tokenizer.pyfile is complete.
- The skeleton for the
- 19:50
- Both files
executor.pyandparser.pyhave base skeletons.
- Both files
2026-01-03:
- 04:46
- Test files have been written for the tokenizer.
- 05:32
- The tokenizer is capable of tokenizing a comment,
the
saykeyword and strings.
- The tokenizer is capable of tokenizing a comment,
the
- 19:06
- Fixed aome identifier errors like double spaces and root words. (i.e.: say -> saying)
2026-01-04:
- 19:45
- Updated the say function so that it is now able to handle string concatenation and integers.
2026-01-05:
- 05:52
- Created the GetNode so now input can be received from the user.
- I suspect the VARIABLE handling may be fragile, but I will cross that bridge when I come to it.
- 15:14
- Started to plan out how the VARIABLES are going to be set.
- 17:27
- Basic variables can be created:
var_name = value. - Need to make it more robust though.
- Basic variables can be created:
- 18:20
- Created a part iterator helper method in
nodes.pyto help with variable expansion.
- Created a part iterator helper method in
2026-01-06:
- 14:57
- Started to work on enforcing string concatenation so I can add functionality to keywords later. I need to test if this works for other keywords and such.
2026-01-07:
- 16:25
- Noticed there was an error with the update running the examples, but patched them.
- The
parse_set_variablemethod was not sending Nodes, and that broke functionality. - Now it is handled a bit better and can pass the existing examples.
- 16:47
- Created a new example file to display math with variables.
- It has issues with type conversion but that should be an easy fix!
- 19:22
- Fixed the
join_partsmethod to allow mathematical equations. - Need to add more operators in the future.
- The math example now functions as intended!
- I need to have the math expanded
5 + 2 + 3etc.
- Fixed the
- 20:32
- Made the math expressions a bit more robust for the following code:
'''spud
say "2 + 2 = " + 2+2'''
- Made the math expressions a bit more robust for the following code:
'''spud
- 20:40
- Updated to version 0.8-2026.01.07 in the Changelogs and filestamps.
2026-01-08:
- 04:08
- Introduced the first error of an unterminated string.
- 04:50
- Updated errors and how their output is returned to the screen.
- 17:50
- Included a '--debug' flag to allow for more verbose output.
- Some errors were introduced like Unknown Identifiers and such.
- 20:20
OperatorNodewas replaced by a more robustBinOperNodewhich also simplified the 'join_parts' method.- I need to allow for chaining of operators like
5 + 2 + 3 + 4 + 1
- 21:02
- Comments are now enforced to be closed. Also, pretty sure I got a majority of the possible errors, but I need to test more.
- 21:13
- Existing keywords are not not allowed to be assigned to.
- 21:20
- Created the
memory.pyfile to handle variable memory.
- Created the
2026-01-09:
- 04:46
- Created a memory environment to handle variable memory, so it is no longer fragile.
- 04:50
- Updated to version 1.0-2026.01.09 in the Changelogs and filestamps.
- 18:58
- Updated the parser to allow for cleaner code and chained mathematical operations.
- 19:44
- Included parentheses for more complex mathematical operations.
2026-01-12:
- 15:20
- Cleaned and rewritten
main.py, moving onto thetokenizer.pyfile.
- Cleaned and rewritten
- 16:50
- Finished refactoring the
tokenizer.pyfile, will move on to theparser.pyfile after a break.
- Finished refactoring the
- 17:50
- Changed error output to the prefered version:
Need to add output for the line in question.
Error: {error} Row: {row} ; Column: {column}
- Changed error output to the prefered version:
- 19:32
- Refactored the
parser.pyfile, now going to thenodes.pyfile. *20:10 - Finished refactoring the
nodes.pyfile. *20:20 - Entire codebase has now been refactored and is ready to be tested.
- Updated changelog to version 1.1.1-2026.01.12 and in the filestamps.
- Refactored the
2026-01-13:
- 14:50
- Started to clean the docstrings/comments and linting the code with: Black Formatter
- 15:09
- Cleaned both the
main.pyandparser.pyfiles. - Moving onto the
tokenizer.pyfile now.
- Cleaned both the
- 15:11
- It was already cleaned and up to par, but I need to add more comments.
- Perhaps most of the modules could benefit from more comments.
- Moving onto the
nodes.pyfile, then afterward thememory.pyfile and a short break.
- 15:23
nodes.pywas linted and cleaned, now the final one before a line check.
- 15:26
- All files have been cleaned and linted, now for the line check.
- 15:35
- All modules seem to have no lines exceeding 80 characters long.
- Now pushing, taking a short break and planning out the next feature - Conditionals.
2026-01-14
- 05:15
- Implemented a basic conditional statement.
- 06:18
- Fixed tildentation.
- Need to add 'but' keyword.
- 17:03
- Starting to implement the
butkeyword.
- Starting to implement the
- 18:00
- The
butkeyword is now working, but the logic is slightly flawed. (Allcheck-but-otherwiseall run instead of only one at a time)
- The
- 21:20
- The check node now processes as a normal
if-elif-elseconditional. - Implemented the
otherwisekeyword as a fallback condition.
- The check node now processes as a normal
2026-01-15
- 07:10
- Renamed the
butkey word toinsteadfor more clarity.
- Renamed the
- 03:18
- Updated the changelog and filestamps to V1.5.2-2026.01.15.
- 15:05
- Starting to clean and lint the code, update documentation and comments and keeping the logic tight and simple.
- 16:08
- Updated some documentation and comments.
- Added some error handling. However, I do need to include the following:
- More verbose error output.
- Column and Line updating fixes.
- Started to implement hard-coded booleans:
- True:
ripe - False:
rotten
- True:
- Updated to version 1.5.5-2026.01.15.
- 16:25
- Ensured all lines in the codebase are 80 characters and under.
- 16:36
- Created the Conditonals example file.
- Noticed the comments are broken and need to be fixed.
- 17:33
- Updated some documentation and comments.
2026-01-16
-
17:45
- Fixed a string error that was caused by a debug comment.
-
18:42
- Fixed the terminator not terminating the code block properly.
-
18:47
- Updated the terminator character to
...for a more simple look.
- Updated the terminator character to
-
20:00
- Code statements in
checkis now wrapped with Eyes "." and Roots "." to make it a bit more seamless. check_parse()method is shortened and refactored.- Comments did not seem to break and I have no clue what the previous bug was, but I am curious if it is still there.
- Termintor is no longer needed with the wrapped block update.
- Officially updated to version 1.6.5-2026.01.16.
- Code statements in
-
21:37
- Cleaned the
parse_check()method and included aparse_branch()method to help parse the check statement.
- Cleaned the
-
14:48
- Beginning to look through the documentation in the code to see if it is clean and correct.
-
15:08
- Made small visual changes in the code and looked over the comments and documentations.
-
15:36
- Included the rest of the mathematical operators.
-,*,/,%, and a special#"masher" which is a fancy Spud themed way of saying floor division//.
- Included the rest of the mathematical operators.
-
16:15
- The "Biological Booleans" have been introduced, as well as regular bools.
- Extra conditional handling has been added.
-
16:25
- Updated the codebase to version 1.8.6-2026.01.19 in the changelog and filestamps.
- Note: I need to try and only make these version updates on Friday.
-
16:30
- Starting the
loopfeature, because I feel like I have finished todays planned work.
- Starting the
-
18:10
- The loop works as intended, but nested blocks are not fully supported.
- I have officailly reached the "Turing Complete" Milestone.
-
21:51
- Nested logic is now supported and breaking out of loops is possible.
2026-01-20
- 05:18
- Refactored
parser.pyto make code a bit cleaner and modulated.
- Refactored
- 05:44
- Cleaned
parser.pya little bit more.
- Cleaned
- 05:55
- Looked over and ensured the codebase is clean.
- 06:13
- Updated error output, need to add the line too.
- 06:20
- Double checked how the row and column is updated.
- 16:43
- Included
.spudas a valid file extension.
- Included
- 18:25
- Implemented functions with the keyword
potto allow for modulated code.
- Implemented functions with the keyword
- 21:28
- Output can be returned from a
potwith thebloomkeyword. - Next I need to include arguments for the
potfunction.
- Output can be returned from a
2026-01-21
-
02:21
- Implementing arguments in the
potfunctions are much harder than I thought it would be...
- Implementing arguments in the
-
19:00
- Finally got arguments to work in the
potfunction. - The factorial example now works as intended.
- Pushing and merging to main and taking a break.
- Finally got arguments to work in the
2026-01-22
- 21:46
- Updated the Changelog and filestamps to V2.3.7-2026.01.21.
***Add Line output to the errors.***
*Implement all Nodes to get data from self.values instead of hard-coded.*