Skip to content

Commit

Permalink
fix all annoying bugs + alpha !!!
Browse files Browse the repository at this point in the history
* Better error messages (it's been a long time 🤣 )
* Does not crash when error in multiple line statements
  • Loading branch information
jd-develop committed Mar 21, 2022
1 parent 5bc3d3f commit 7094142
Show file tree
Hide file tree
Showing 8 changed files with 39 additions and 25 deletions.
12 changes: 6 additions & 6 deletions example.noug
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# This file was made in nougaro-prototype-1 version.
# This file was made in nougaro alpha 0.1 version.

# This is a comment
# Basics :
Expand All @@ -11,12 +11,12 @@ print(3-4)
print(2*3)
print(6/2)
print(3^2)
print(|-5|)
print(abs(-5))

# Variables
var sometext = "Hello, world!"
var some_text = "Hello, world!"
var a = var b = 3
print(sometext); print(a * b)
print(some_text); print(a * b)
print(noug_version)
print(None)

Expand All @@ -25,7 +25,7 @@ print("this is a string quoted by \".")
print("You can put\nbacklines and\n\ttabs.")
print("You can add \\ backslashes and \" \' quotes")

print("You can additionate and multiply strings : " + 3*sometext)
print("You can add up and multiply strings: " + 3*some_text)

# Tests
var name = input("Whats your name? ")
Expand Down Expand Up @@ -67,7 +67,7 @@ def fib(n)
end
end

print(fib(input_int("Enter number:")))
print(fib(input_int("Enter number: ")))

var a = def()->print("Hello, world!")
a()
Expand Down
2 changes: 1 addition & 1 deletion shell.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@

with open("version.json") as ver_json:
ver_json_loaded = json.load(ver_json)
version = ver_json_loaded.get("noug_version")
version = ver_json_loaded.get("phase") + " " + ver_json_loaded.get("noug_version")

if path == "<stdin>":
print(f"Welcome to Nougaro {version}! Contribute : https://github.com/jd-develop/nougaro/")
Expand Down
2 changes: 1 addition & 1 deletion src/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ def __init__(self, node_to_call, arg_nodes: list):
self.pos_end = self.node_to_call.pos_end

def __repr__(self):
return f'(call:{self.node_to_call})'
return f'(call:{self.node_to_call}, arg_nodes:{self.arg_nodes})'


class ReturnNode:
Expand Down
2 changes: 1 addition & 1 deletion src/nougaro.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

with open("version.json") as ver_json:
ver_json_loaded = json.load(ver_json)
version_ = ver_json_loaded.get("noug_version")
version_ = ver_json_loaded.get("phase") + " " + ver_json_loaded.get("noug_version")


# ##########
Expand Down
38 changes: 24 additions & 14 deletions src/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from src.parse_result import ParseResult
from src.nodes import * # src.tokens.Token is imported in src.nodes
# built-in python imports
# no imports
from typing import Any, Union


# ##########
Expand Down Expand Up @@ -53,7 +53,9 @@ def update_current_token(self):

# GRAMMARS ATOMS (AST) :

def statements(self):
def statements(self, stop: list[Union[tuple[str, Any], str]] = None) -> ParseResult:
if stop is None:
stop = [TT_EOF]
result = ParseResult()
statements = []
pos_start = self.current_token.pos_start.copy()
Expand Down Expand Up @@ -81,13 +83,20 @@ def statements(self):
if newline_count == 0:
more_statements = False

if not more_statements:
have_to_break = False
for e in stop:
if isinstance(e, tuple):
if not more_statements or self.current_token.matches(*e):
have_to_break = True
else:
if not more_statements or self.current_token.type == e:
have_to_break = True
if have_to_break:
break
statement = result.try_register(self.statement())
if statement is None:
self.reverse(result.to_reverse_count)
more_statements = False
continue

statement = result.register(self.statement())
if result.error is not None:
return result
statements.append(statement)

return result.success(ListNode(
Expand Down Expand Up @@ -450,7 +459,7 @@ def if_expr_c(self):
result.register_advancement()
self.advance()

statements = result.register(self.statements())
statements = result.register(self.statements(stop=[(TT_KEYWORD, 'end')]))
if result.error is not None:
return result
else_case = (statements, True)
Expand Down Expand Up @@ -517,7 +526,8 @@ def if_expr_cases(self, case_keyword):
result.register_advancement()
self.advance()

statements = result.register(self.statements())
statements = result.register(self.statements(stop=[(TT_KEYWORD, 'elif'), (TT_KEYWORD, 'else'),
(TT_KEYWORD, 'end')]))
if result.error is not None:
return result
cases.append((condition, statements, True))
Expand Down Expand Up @@ -592,7 +602,7 @@ def for_expr(self):
result.register_advancement()
self.advance()

body = result.register(self.statements())
body = result.register(self.statements(stop=[(TT_KEYWORD, 'end')]))
if result.error is not None:
return result

Expand Down Expand Up @@ -662,7 +672,7 @@ def for_expr(self):
result.register_advancement()
self.advance()

body = result.register(self.statements())
body = result.register(self.statements(stop=[(TT_KEYWORD, 'end')]))
if result.error is not None:
return result

Expand Down Expand Up @@ -708,7 +718,7 @@ def while_expr(self):
result.register_advancement()
self.advance()

body = result.register(self.statements())
body = result.register(self.statements(stop=[(TT_KEYWORD, 'end')]))
if result.error is not None:
return result

Expand Down Expand Up @@ -844,7 +854,7 @@ def func_def(self):
result.register_advancement()
self.advance()

body = result.register(self.statements())
body = result.register(self.statements(stop=[(TT_KEYWORD, 'end')]))
if result.error is not None:
return result

Expand Down
3 changes: 3 additions & 0 deletions src/position.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,8 @@ def advance(self, current_char=None):

return self

def __repr__(self):
return f"Position at index {self.index} line {self.line_number} colon {self.colon}, in file {self.file_name}."

def copy(self):
return Position(self.index, self.line_number, self.colon, self.file_name, self.file_txt)
2 changes: 1 addition & 1 deletion src/tokens.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def __init__(self, type_, value=None, pos_start=None, pos_end=None):
self.pos_end = pos_start.copy()
self.pos_end.advance()
if pos_end is not None:
self.pos_end = pos_end
self.pos_end = pos_end.copy()

def __repr__(self) -> str:
if self.value:
Expand Down
3 changes: 2 additions & 1 deletion version.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"noug_version": "prototype-2",
"noug_version": "0.1",
"phase": "alpha",
"inherit": true
}

0 comments on commit 7094142

Please sign in to comment.