added return type to function
This commit is contained in:
parent
38353246b2
commit
b9e938f8a1
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*.pyc
|
||||||
|
/.idea/
|
@ -4,11 +4,11 @@ use test2 as test3 from Tests;
|
|||||||
lib Main {
|
lib Main {
|
||||||
class Program {
|
class Program {
|
||||||
func Main(args: list): void {
|
func Main(args: list): void {
|
||||||
test_a = test1();
|
var test_a: test1 = test1();
|
||||||
test_a.dec_vars();
|
test_a.dec_vars();
|
||||||
test_a.is_error();
|
test_a.is_error();
|
||||||
if (!error) {
|
if (!error) {
|
||||||
test_b = test3();
|
var test_b: test3 = test3();
|
||||||
test3.continue();
|
test3.continue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,22 +3,22 @@ lib Tests
|
|||||||
/*
|
/*
|
||||||
declaration of some tests
|
declaration of some tests
|
||||||
*/
|
*/
|
||||||
export class test1
|
public class test1
|
||||||
{
|
{
|
||||||
export test_string: string = 'Hello';
|
public var test_string: string = 'Hello';
|
||||||
export test_string_2: string = "Hello World";
|
public var test_string_2: string = "Hello World";
|
||||||
export test_num: num = 1;
|
public var test_num: num = 1;
|
||||||
export test_num_2: num = 1.0;
|
public var test_num_2: num = 1.0;
|
||||||
export test_num_3: num = this.test_num + this.test_num_2;
|
public var test_num_3: num = this.test_num + this.test_num_2;
|
||||||
|
|
||||||
export func dec_vars(): void
|
public func dec_vars(): void
|
||||||
{
|
{
|
||||||
test_bool: bool = true;
|
var test_bool: bool = true;
|
||||||
test_bool_2: bool = false;
|
var test_bool_2: bool = false;
|
||||||
test_bool_3: bool = test_bool != test_bool_2; # true
|
var test_bool_3: bool = test_bool != test_bool_2; # true
|
||||||
}
|
}
|
||||||
|
|
||||||
export is_error(): bool
|
public is_error(): bool
|
||||||
{
|
{
|
||||||
if (error != empty)
|
if (error != empty)
|
||||||
{
|
{
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
lib Tests {
|
lib Tests {
|
||||||
export class test2 {
|
public class test2 {
|
||||||
string_a = string1();
|
string_a = string1();
|
||||||
export func continue() {
|
public func continue() {
|
||||||
input(string_a.string1 + ': ');
|
input(string_a.string1 + ': ');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class strings {
|
class strings {
|
||||||
public string1 = "hello world";
|
var public string1 = "hello world";
|
||||||
}
|
}
|
||||||
}
|
}
|
14
doc/test.bl
14
doc/test.bl
@ -6,15 +6,15 @@
|
|||||||
|
|
||||||
lib Main {
|
lib Main {
|
||||||
class Program {
|
class Program {
|
||||||
func Main() {
|
func Main(): void {
|
||||||
testBool: bool;
|
var testBool: bool;
|
||||||
testEmpty: emptyType = empty;
|
var testEmpty: emptyType = empty;
|
||||||
testNum: number = 3.0;
|
var testNum: number = 3.0;
|
||||||
testBool_2: bool = 3 > 1;
|
var testBool_2: bool = 3 > 1;
|
||||||
output('Hello World');
|
output('Hello World');
|
||||||
output(66);
|
output(66);
|
||||||
output(3 + 3);
|
output(3 + 3);
|
||||||
test: string = input('# ');
|
var test: string = input('# ');
|
||||||
output(test);
|
output(test);
|
||||||
output(false);
|
output(false);
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ lib Main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# public func test1234(param: list) {
|
# public func test1234(param: list) {
|
||||||
public func test1234()
|
public func test1234(): void
|
||||||
{
|
{
|
||||||
/*for i in range(0, length(param)) {
|
/*for i in range(0, length(param)) {
|
||||||
output(i);
|
output(i);
|
||||||
|
@ -2,9 +2,9 @@ from Interpreter.Repo import Repo
|
|||||||
from Interpreter.Utils import Utils
|
from Interpreter.Utils import Utils
|
||||||
from Models.Interpreter.Error import Error
|
from Models.Interpreter.Error import Error
|
||||||
from Models.Interpreter.Token import Token
|
from Models.Interpreter.Token import Token
|
||||||
from Models.Language.AST.Class import Class
|
from Models.Language.Class import Class
|
||||||
from Models.Language.AST.Func import Func
|
from Models.Language.Func import Func
|
||||||
from Models.Language.AST.Lib import Lib
|
from Models.Language.Lib import Lib
|
||||||
|
|
||||||
|
|
||||||
class Parser:
|
class Parser:
|
||||||
@ -49,7 +49,7 @@ class Parser:
|
|||||||
for a_class in a_lib.ast:
|
for a_class in a_lib.ast:
|
||||||
print(a_class.name, a_class.access)
|
print(a_class.name, a_class.access)
|
||||||
for a_funcs in a_class.ast:
|
for a_funcs in a_class.ast:
|
||||||
print(a_funcs.name, a_funcs.access)
|
print(a_funcs.name, a_funcs.return_type, a_funcs.access)
|
||||||
|
|
||||||
print('___')
|
print('___')
|
||||||
# print(self.__repo.ast, '\n')
|
# print(self.__repo.ast, '\n')
|
||||||
@ -85,7 +85,7 @@ class Parser:
|
|||||||
if not self.__is_scope_started() and tok.type == 'keyword':
|
if not self.__is_scope_started() and tok.type == 'keyword':
|
||||||
self.__check_keyword(tok)
|
self.__check_keyword(tok)
|
||||||
|
|
||||||
elif not self.__is_scope_started() and tok.type == 'type' or tok.type in self.__repo.types:
|
elif tok.type == 'type' or tok.type in self.__repo.types:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
elif not self.__is_scope_started() and tok.type in self.__repo.var_types:
|
elif not self.__is_scope_started() and tok.type in self.__repo.var_types:
|
||||||
@ -128,12 +128,15 @@ class Parser:
|
|||||||
|
|
||||||
def __check_format_char(self, tok: Token) -> None:
|
def __check_format_char(self, tok: Token) -> None:
|
||||||
if tok.value == '{':
|
if tok.value == '{':
|
||||||
|
# token in storage must be name!
|
||||||
if len(self.__token_storage) > 0 and self.__token_storage[0].type == 'name':
|
if len(self.__token_storage) > 0 and self.__token_storage[0].type == 'name':
|
||||||
|
# lib
|
||||||
if self.__is_start_lib and not self.__is_start_class and not self.__is_start_func:
|
if self.__is_start_lib and not self.__is_start_class and not self.__is_start_func:
|
||||||
self.__lib = Lib(self.__token_storage[0].value)
|
self.__lib = Lib(self.__token_storage[0].value)
|
||||||
self.__token_storage = []
|
self.__token_storage = []
|
||||||
self.__is_start_lib = False
|
self.__is_start_lib = False
|
||||||
|
|
||||||
|
# class
|
||||||
elif not self.__is_start_lib and self.__is_start_class and not self.__is_start_func:
|
elif not self.__is_start_lib and self.__is_start_class and not self.__is_start_func:
|
||||||
access = ''
|
access = ''
|
||||||
if self.__is_public:
|
if self.__is_public:
|
||||||
@ -144,15 +147,20 @@ class Parser:
|
|||||||
self.__token_storage = []
|
self.__token_storage = []
|
||||||
self.__is_start_class = False
|
self.__is_start_class = False
|
||||||
|
|
||||||
|
# func
|
||||||
elif not self.__is_start_lib and not self.__is_start_class and self.__is_start_func:
|
elif not self.__is_start_lib and not self.__is_start_class and self.__is_start_func:
|
||||||
access = ''
|
access = ''
|
||||||
|
|
||||||
|
if len(self.__token_storage) > 1 and self.__token_storage[1].type == 'type':
|
||||||
if self.__is_public:
|
if self.__is_public:
|
||||||
access = 'public'
|
access = 'public'
|
||||||
self.__is_public = False
|
self.__is_public = False
|
||||||
|
|
||||||
self.__func = Func(self.__token_storage[0].value, access=access)
|
self.__func = Func(self.__token_storage[0].value, self.__token_storage[1].value, access=access)
|
||||||
self.__token_storage = []
|
self.__token_storage = []
|
||||||
self.__is_start_func = False
|
self.__is_start_func = False
|
||||||
|
else:
|
||||||
|
self.__utils.error(Error(3.7))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.__utils.error(Error(2.9, f'{tok.type}: {tok.value}'))
|
self.__utils.error(Error(2.9, f'{tok.type}: {tok.value}'))
|
||||||
@ -179,6 +187,14 @@ class Parser:
|
|||||||
elif not self.__is_scope_started() and tok.value in self.__repo.format_chars:
|
elif not self.__is_scope_started() and tok.value in self.__repo.format_chars:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
elif tok.value == ':':
|
||||||
|
if self.__is_only_func_started():
|
||||||
|
next = self.__get_next_token()
|
||||||
|
if next.type == 'type':
|
||||||
|
self.__token_storage.append(next)
|
||||||
|
else:
|
||||||
|
self.__utils.error(Error(3.7))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.__utils.error(Error(2.9, f'{tok.type}: {tok.value}'))
|
self.__utils.error(Error(2.9, f'{tok.type}: {tok.value}'))
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ class Repo:
|
|||||||
'lib',
|
'lib',
|
||||||
'class',
|
'class',
|
||||||
'func',
|
'func',
|
||||||
|
'var',
|
||||||
# builtin functions
|
# builtin functions
|
||||||
'output',
|
'output',
|
||||||
'input',
|
'input',
|
||||||
|
@ -25,8 +25,7 @@ class Main:
|
|||||||
for line in f:
|
for line in f:
|
||||||
self.__interpreter.interpret(line)
|
self.__interpreter.interpret(line)
|
||||||
else:
|
else:
|
||||||
self.__repo.error = Error(1.1, 'File not found')
|
self.__utils.error(Error(1.1))
|
||||||
self.__utils.error()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -15,10 +15,6 @@ class Error:
|
|||||||
2.3: 'Unknown function',
|
2.3: 'Unknown function',
|
||||||
2.4: 'Unknown class',
|
2.4: 'Unknown class',
|
||||||
2.5: 'Unknown library',
|
2.5: 'Unknown library',
|
||||||
2.6: 'Access error: no export',
|
|
||||||
2.7: 'Expression error',
|
|
||||||
2.8: 'Unexpected end of line',
|
|
||||||
2.9: 'Unexpected {}', # other types
|
|
||||||
|
|
||||||
# Parser:
|
# Parser:
|
||||||
3.0: 'Lib in lib',
|
3.0: 'Lib in lib',
|
||||||
@ -28,6 +24,11 @@ class Error:
|
|||||||
3.4: 'Class in func',
|
3.4: 'Class in func',
|
||||||
3.5: 'Func in lib',
|
3.5: 'Func in lib',
|
||||||
3.6: 'Func in func',
|
3.6: 'Func in func',
|
||||||
|
3.7: 'Expected: type',
|
||||||
|
3.8: 'Access error: no export',
|
||||||
|
3.9: 'Expression error',
|
||||||
|
3.10: 'Unexpected end of line',
|
||||||
|
3.11: 'Unexpected {}', # other types
|
||||||
}
|
}
|
||||||
|
|
||||||
self.msg = self.__msgs[code].format(msg)
|
self.msg = self.__msgs[code].format(msg)
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
class Func:
|
|
||||||
|
|
||||||
def __init__(self, name: str, access: str = '') -> None:
|
|
||||||
self.name = name
|
|
||||||
self.ast = []
|
|
||||||
self.access = access
|
|
@ -2,5 +2,5 @@ class Class:
|
|||||||
|
|
||||||
def __init__(self, name: str, access: str = '') -> None:
|
def __init__(self, name: str, access: str = '') -> None:
|
||||||
self.name = name
|
self.name = name
|
||||||
self.ast = []
|
self.ast = [] # filled by parser
|
||||||
self.access = access
|
self.access = access
|
7
src/Models/Language/Func.py
Normal file
7
src/Models/Language/Func.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
class Func:
|
||||||
|
|
||||||
|
def __init__(self, name: str, return_type: str, access: str = '') -> None:
|
||||||
|
self.name = name
|
||||||
|
self.return_type = return_type
|
||||||
|
self.ast = [] # filled by parser
|
||||||
|
self.access = access
|
@ -2,4 +2,4 @@ class Lib:
|
|||||||
|
|
||||||
def __init__(self, name: str) -> None:
|
def __init__(self, name: str) -> None:
|
||||||
self.name = name
|
self.name = name
|
||||||
self.ast = []
|
self.ast = [] # filled by parser
|
6
src/Models/Language/Var.py
Normal file
6
src/Models/Language/Var.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
class Var:
|
||||||
|
|
||||||
|
def __init__(self, name: str, type: str, access: str = ''):
|
||||||
|
self.name = name
|
||||||
|
self.type = type
|
||||||
|
self.access = access
|
Loading…
Reference in New Issue
Block a user