initial commit
This commit is contained in:
		
							
								
								
									
										4
									
								
								console.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								console.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| from rich.console import Console | ||||
|  | ||||
|  | ||||
| console = Console() | ||||
							
								
								
									
										23
									
								
								error.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								error.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| from console import console | ||||
|  | ||||
|  | ||||
| def traceback(code: str, error_type: str, error_message: str, line: int | None = None, start_column: int | None = None, end_column: int | None = None): | ||||
| 	if line != None: | ||||
| 		console.print(f"[bold red]{error_type} on line {line}: [/]{error_message}\n") | ||||
| 		lines = code.split("\n")[line-1:line+2] | ||||
|  | ||||
| 		console.print(f"{line  }  > " + lines[0], highlight=False) | ||||
| 		if start_column != None and end_column != None: | ||||
| 			console.print("   " + (" " * start_column) + "[bold red]" + ("^" * (end_column-start_column+1))) | ||||
|  | ||||
| 		try: | ||||
| 			console.print(f"{line+1}    " + lines[1], highlight=False) | ||||
| 			console.print(f"{line+2}    " + lines[2], highlight=False) | ||||
| 			console.print("     ...", highlight=False) | ||||
| 		except IndexError: # the file is less than 3 lines i guess | ||||
| 			pass | ||||
| 	else: | ||||
| 		console.print(f"[bold red]{error_type}: {error_message}") | ||||
| 	 | ||||
| 	 | ||||
| 	 | ||||
							
								
								
									
										19
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								main.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| from tokenizer import tokenize | ||||
| from rich import print | ||||
| from time import time | ||||
|  | ||||
|  | ||||
| def main(): | ||||
| 	start = time() | ||||
| 	file = open("test.grnd", "r") | ||||
| 	code = file.read() | ||||
| 	file.close() | ||||
|  | ||||
| 	tokens = tokenize(code) | ||||
| 	compile_time = time()-start | ||||
| 	print(tokens) | ||||
| 	print(f"Compiled in {compile_time} seconds.") | ||||
|  | ||||
|  | ||||
| if __name__ == "__main__": | ||||
| 	main() | ||||
							
								
								
									
										79
									
								
								test.grnd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								test.grnd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| # checks if the current index in the determiner matches the current index in the target string | ||||
| fun -bool !currentCharsMatch -string &str -string &determiner -int &counter -int &detIndex | ||||
|     getstrcharat $str $counter ¤tChar | ||||
|     getstrcharat $determiner $detIndex ¤tDetChar | ||||
|     equal $currentChar $currentDetChar &equals | ||||
|     return $equals | ||||
| endfun | ||||
|  | ||||
| fun -list !split -string &str -string &determiner | ||||
|     # create an empty list | ||||
|     setlist *output "" | ||||
|     set &counter 0 | ||||
|     set &detIndex 0 | ||||
|     set ¤tLoop "" # basically we build out the current token until we reach the determiner | ||||
|     getstrsize $str &length | ||||
|     getstrsize $determiner &determinerLength | ||||
|     | ||||
|     # go through each char in the string, does it match the first char in our determiner? | ||||
|     #@loop | ||||
|     # we are technically getting the current char twice | ||||
|     # 1. inside the currentCharsMatch function | ||||
|     # 2. here | ||||
|     # but oh well, it wont be that bad (i hope) | ||||
|     getstrcharat $str $counter ¤tChar | ||||
|  | ||||
|     pusharg $str | ||||
|     pusharg $determiner  | ||||
|     pusharg $counter | ||||
|     pusharg $detIndex | ||||
|     call !currentCharsMatch &equals | ||||
|     not $equals &doesntMatch | ||||
|     if $doesntMatch %next | ||||
|      | ||||
|     stdlnout "WE HAVE A MATCH" | ||||
|     set &detIndex 0 | ||||
|     # WE HAVE A MATCH BABY, we gotta make sure it matches the whole determiner tho | ||||
|     @innerLoop | ||||
|      | ||||
|     pusharg $str | ||||
|     pusharg $determiner | ||||
|     pusharg $counter | ||||
|     pusharg $detIndex | ||||
|     call !currentCharsMatch &equals | ||||
|     add $detIndex 1 &detIndex | ||||
|     equal $detIndex $determinerLength &endOfDet | ||||
|     if $endOfDet %append | ||||
|     if $equals %innerLoop | ||||
|  | ||||
|     @append | ||||
|     listappend *output $currentLoop | ||||
|     set ¤tLoop "" | ||||
|     set &detIndex 0 | ||||
|      | ||||
|     @next | ||||
|     add $currentLoop $currentChar ¤tLoop | ||||
|     # next character in the string | ||||
|     add $counter 1 &counter | ||||
|     inequal $length $counter ¬AtEnd | ||||
|     stdlnout $notAtEnd | ||||
|     if $notAtEnd %loop | ||||
|  | ||||
|     return *output | ||||
| endfun | ||||
|  | ||||
| pusharg "split this string" | ||||
| pusharg " " | ||||
| call !split *listOut | ||||
| #getlistsize *listOut &length | ||||
| #stdlnout $length | ||||
|  | ||||
| set &counter 0 | ||||
|  | ||||
| @loopOverList | ||||
| getlistat *listOut $counter ¤tItem | ||||
| stdlnout $currentItem | ||||
| add $counter 1 &counter | ||||
| getlistsize *listOut &length | ||||
| inequal $counter $length ¬Done | ||||
| if $notDone %loopOverList | ||||
							
								
								
									
										4
									
								
								test2.grnd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								test2.grnd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| set &x 0 | ||||
| @loop | ||||
| add $x 1 &x | ||||
| jump %loop | ||||
		Reference in New Issue
	
	Block a user