nebulara 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Compiler/nbs-bootstrap.c +2229 -0
- package/Compiler/nbs_cli.c +1553 -0
- package/Compiler/neb-cli.exe +0 -0
- package/Compiler/neb-codegen.c +287 -0
- package/Compiler/neb-ffi.c +303 -0
- package/Compiler/neb-ir.c +307 -0
- package/Compiler/neb-knowledge.c +203 -0
- package/Compiler/neb-pipeline.c +787 -0
- package/Compiler/neb-semantic.c +261 -0
- package/Compiler/nebulara.exe +0 -0
- package/README.md +258 -0
- package/SPEC.md +267 -0
- package/bin/neb.js +36 -0
- package/build/neb-cli.exe +0 -0
- package/build/neb-codegen.exe +0 -0
- package/build/neb-ffi.exe +0 -0
- package/build/neb-knowledge.exe +0 -0
- package/build/neb-pipeline.exe +0 -0
- package/build/nebulara.exe +0 -0
- package/dist/index.js +131 -0
- package/package.json +39 -0
- package/std/collections.nbs +72 -0
- package/std/json.nbs +15 -0
- package/std/kanban.nbs +122 -0
- package/std/math.nbs +52 -0
- package/std/net.nbs +22 -0
- package/std/primitives.nbs +30 -0
- package/std/string.nbs +71 -0
- package/std/time.nbs +15 -0
- package/test/broken.nbs +2 -0
- package/test/hello.nbs +6 -0
- package/test/test-arrays.nbs +22 -0
- package/test/test-charat.nbs +7 -0
- package/test/test-cont-debug.nbs +8 -0
- package/test/test-cont-min.nbs +7 -0
- package/test/test-cont-parens.nbs +7 -0
- package/test/test-cont2.nbs +7 -0
- package/test/test-cont3.nbs +7 -0
- package/test/test-control.nbs +18 -0
- package/test/test-functions.nbs +13 -0
- package/test/test-loops.nbs +17 -0
- package/test/test-mod-for.nbs +6 -0
- package/test/test-mod.nbs +5 -0
- package/test/test-new-features.nbs +39 -0
- package/test/test-recursion.nbs +23 -0
- package/test/test-runtime.nbs +8 -0
- package/test/test-strings.nbs +14 -0
- package/test/test-trycatch.nbs +11 -0
package/std/math.nbs
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Nebulara Standard Library - Math
|
|
2
|
+
# Basic math operations (built-in as VM opcodes)
|
|
3
|
+
|
|
4
|
+
FUNC! abs(x):
|
|
5
|
+
IF? x < 0:
|
|
6
|
+
RETURN -x
|
|
7
|
+
END!
|
|
8
|
+
RETURN x
|
|
9
|
+
END!
|
|
10
|
+
|
|
11
|
+
FUNC! min(a, b):
|
|
12
|
+
IF? a < b:
|
|
13
|
+
RETURN a
|
|
14
|
+
END!
|
|
15
|
+
RETURN b
|
|
16
|
+
END!
|
|
17
|
+
|
|
18
|
+
FUNC! max(a, b):
|
|
19
|
+
IF? a > b:
|
|
20
|
+
RETURN a
|
|
21
|
+
END!
|
|
22
|
+
RETURN b
|
|
23
|
+
END!
|
|
24
|
+
|
|
25
|
+
FUNC! clamp(value, lo, hi):
|
|
26
|
+
IF? value < lo:
|
|
27
|
+
RETURN lo
|
|
28
|
+
END!
|
|
29
|
+
IF? value > hi:
|
|
30
|
+
RETURN hi
|
|
31
|
+
END!
|
|
32
|
+
RETURN value
|
|
33
|
+
END!
|
|
34
|
+
|
|
35
|
+
FUNC! sum_array(arr):
|
|
36
|
+
LET total = 0
|
|
37
|
+
LET i = 0
|
|
38
|
+
LET len = LEN(arr)
|
|
39
|
+
WHILE? i < len:
|
|
40
|
+
total = total + arr[i]
|
|
41
|
+
i = i + 1
|
|
42
|
+
END!
|
|
43
|
+
RETURN total
|
|
44
|
+
END!
|
|
45
|
+
|
|
46
|
+
FUNC! average(arr):
|
|
47
|
+
LET len = LEN(arr)
|
|
48
|
+
IF? len == 0:
|
|
49
|
+
RETURN 0
|
|
50
|
+
END!
|
|
51
|
+
RETURN sum_array(arr) / len
|
|
52
|
+
END!
|
package/std/net.nbs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Nebulara Standard Library - Net
|
|
2
|
+
# Network and HTTP utilities (stubs for FFI)
|
|
3
|
+
|
|
4
|
+
# HTTP functions require FFI to libcurl or platform HTTP library - not yet implemented
|
|
5
|
+
|
|
6
|
+
# Planned API: GET request, returns response body as string
|
|
7
|
+
FUNC! http_get(url):
|
|
8
|
+
PRINT "net.http_get: not yet implemented - requires FFI to libcurl or platform HTTP library"
|
|
9
|
+
RETURN NULL
|
|
10
|
+
END!
|
|
11
|
+
|
|
12
|
+
# Planned API: POST request with body, returns response body as string
|
|
13
|
+
FUNC! http_post(url, body):
|
|
14
|
+
PRINT "net.http_post: not yet implemented - requires FFI to libcurl or platform HTTP library"
|
|
15
|
+
RETURN NULL
|
|
16
|
+
END!
|
|
17
|
+
|
|
18
|
+
# Planned API: Start HTTP server on given port
|
|
19
|
+
FUNC! serve(port):
|
|
20
|
+
PRINT "net.serve: not yet implemented - requires FFI to libcurl or platform HTTP library"
|
|
21
|
+
RETURN NULL
|
|
22
|
+
END!
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Nebulara Standard Library - Primitives
|
|
2
|
+
# Type checking and basic operations
|
|
3
|
+
|
|
4
|
+
FUNC! is_string(v):
|
|
5
|
+
RETURN TYPEOF(v) == "string"
|
|
6
|
+
END!
|
|
7
|
+
|
|
8
|
+
FUNC! is_number(v):
|
|
9
|
+
RETURN TYPEOF(v) == "int"
|
|
10
|
+
END!
|
|
11
|
+
|
|
12
|
+
FUNC! is_bool(v):
|
|
13
|
+
RETURN TYPEOF(v) == "bool"
|
|
14
|
+
END!
|
|
15
|
+
|
|
16
|
+
FUNC! is_array(v):
|
|
17
|
+
RETURN TYPEOF(v) == "array"
|
|
18
|
+
END!
|
|
19
|
+
|
|
20
|
+
FUNC! is_null(v):
|
|
21
|
+
RETURN TYPEOF(v) == "null"
|
|
22
|
+
END!
|
|
23
|
+
|
|
24
|
+
FUNC! to_int(v):
|
|
25
|
+
RETURN TO_NUMBER(v)
|
|
26
|
+
END!
|
|
27
|
+
|
|
28
|
+
FUNC! to_str(v):
|
|
29
|
+
RETURN TO_STRING(v)
|
|
30
|
+
END!
|
package/std/string.nbs
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Nebulara Standard Library - String
|
|
2
|
+
# String manipulation utilities (using built-in functions)
|
|
3
|
+
|
|
4
|
+
FUNC! concat(a, b):
|
|
5
|
+
RETURN a + b
|
|
6
|
+
END!
|
|
7
|
+
|
|
8
|
+
FUNC! repeat(s, n):
|
|
9
|
+
LET result = ""
|
|
10
|
+
LET i = 0
|
|
11
|
+
WHILE? i < n:
|
|
12
|
+
result = result + s
|
|
13
|
+
i = i + 1
|
|
14
|
+
END!
|
|
15
|
+
RETURN result
|
|
16
|
+
END!
|
|
17
|
+
|
|
18
|
+
FUNC! reverse(s):
|
|
19
|
+
LET len = LEN(s)
|
|
20
|
+
LET result = ""
|
|
21
|
+
LET i = len - 1
|
|
22
|
+
WHILE? i >= 0:
|
|
23
|
+
result = result + CHAR_AT(s, i)
|
|
24
|
+
i = i - 1
|
|
25
|
+
END!
|
|
26
|
+
RETURN result
|
|
27
|
+
END!
|
|
28
|
+
|
|
29
|
+
FUNC! contains(s, sub):
|
|
30
|
+
LET slen = LEN(s)
|
|
31
|
+
LET sublen = LEN(sub)
|
|
32
|
+
IF? sublen == 0:
|
|
33
|
+
RETURN TRUE
|
|
34
|
+
END!
|
|
35
|
+
IF? sublen > slen:
|
|
36
|
+
RETURN FALSE
|
|
37
|
+
END!
|
|
38
|
+
LET i = 0
|
|
39
|
+
WHILE? i <= slen - sublen:
|
|
40
|
+
LET match = TRUE
|
|
41
|
+
LET j = 0
|
|
42
|
+
WHILE? j < sublen:
|
|
43
|
+
IF? CHAR_AT(s, i + j) != CHAR_AT(sub, j):
|
|
44
|
+
match = FALSE
|
|
45
|
+
BREAK
|
|
46
|
+
END!
|
|
47
|
+
j = j + 1
|
|
48
|
+
END!
|
|
49
|
+
IF? match == TRUE:
|
|
50
|
+
RETURN TRUE
|
|
51
|
+
END!
|
|
52
|
+
i = i + 1
|
|
53
|
+
END!
|
|
54
|
+
RETURN FALSE
|
|
55
|
+
END!
|
|
56
|
+
|
|
57
|
+
FUNC! to_upper(s):
|
|
58
|
+
RETURN TO_UPPER(s)
|
|
59
|
+
END!
|
|
60
|
+
|
|
61
|
+
FUNC! to_lower(s):
|
|
62
|
+
RETURN TO_LOWER(s)
|
|
63
|
+
END!
|
|
64
|
+
|
|
65
|
+
FUNC! trim(s):
|
|
66
|
+
RETURN TRIM(s)
|
|
67
|
+
END!
|
|
68
|
+
|
|
69
|
+
FUNC! substring(s, start, len):
|
|
70
|
+
RETURN SUBSTR(s, start, len)
|
|
71
|
+
END!
|
package/std/time.nbs
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Nebulara Standard Library - Time
|
|
2
|
+
# Time and date utilities
|
|
3
|
+
|
|
4
|
+
FUNC! now():
|
|
5
|
+
RETURN TIME()
|
|
6
|
+
END!
|
|
7
|
+
|
|
8
|
+
FUNC! elapsed(start_time):
|
|
9
|
+
RETURN TIME() - start_time
|
|
10
|
+
END!
|
|
11
|
+
|
|
12
|
+
# sleep is not yet implemented - requires FFI to C library
|
|
13
|
+
FUNC! sleep(ms):
|
|
14
|
+
PRINT "TIME.sleep: not yet implemented - requires FFI to C library"
|
|
15
|
+
END!
|
package/test/broken.nbs
ADDED
package/test/hello.nbs
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Test: Arrays
|
|
2
|
+
PRINT "Array tests:"
|
|
3
|
+
LET arr = [10, 20, 30, 40, 50]
|
|
4
|
+
PRINT arr[0]
|
|
5
|
+
PRINT arr[2]
|
|
6
|
+
PRINT arr[4]
|
|
7
|
+
|
|
8
|
+
PRINT "Array length:"
|
|
9
|
+
PRINT LEN(arr)
|
|
10
|
+
|
|
11
|
+
PRINT "Array sum:"
|
|
12
|
+
LET total = 0
|
|
13
|
+
FOR! i = 0 TO 4:
|
|
14
|
+
total = total + arr[i]
|
|
15
|
+
END!
|
|
16
|
+
PRINT total
|
|
17
|
+
|
|
18
|
+
PRINT "Array with strings:"
|
|
19
|
+
LET words = ["hello", "world", "nebulara"]
|
|
20
|
+
PRINT words[0]
|
|
21
|
+
PRINT words[1]
|
|
22
|
+
PRINT LEN(words)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Test: BREAK and CONTINUE
|
|
2
|
+
PRINT "BREAK test:"
|
|
3
|
+
LET n = 1
|
|
4
|
+
WHILE? n <= 10:
|
|
5
|
+
IF? n == 6:
|
|
6
|
+
BREAK
|
|
7
|
+
END!
|
|
8
|
+
PRINT n
|
|
9
|
+
n = n + 1
|
|
10
|
+
END!
|
|
11
|
+
|
|
12
|
+
PRINT "CONTINUE test:"
|
|
13
|
+
FOR! m = 1 TO 10:
|
|
14
|
+
IF? m % 2 == 0:
|
|
15
|
+
CONTINUE
|
|
16
|
+
END!
|
|
17
|
+
PRINT m
|
|
18
|
+
END!
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Test: Loops - WHILE and FOR
|
|
2
|
+
PRINT "WHILE loop (count to 5):"
|
|
3
|
+
LET i = 1
|
|
4
|
+
WHILE? i <= 5:
|
|
5
|
+
PRINT i
|
|
6
|
+
i = i + 1
|
|
7
|
+
END!
|
|
8
|
+
|
|
9
|
+
PRINT "FOR loop (1 to 5):"
|
|
10
|
+
FOR! j = 1 TO 5:
|
|
11
|
+
PRINT j
|
|
12
|
+
END!
|
|
13
|
+
|
|
14
|
+
PRINT "FOR loop with STEP:"
|
|
15
|
+
FOR! k = 0 TO 20 STEP 5:
|
|
16
|
+
PRINT k
|
|
17
|
+
END!
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
LET arr = [10, 20, 30]
|
|
2
|
+
arr[1] = 99
|
|
3
|
+
PRINT(arr[1])
|
|
4
|
+
PRINT(arr)
|
|
5
|
+
|
|
6
|
+
LET a = [1, 2]
|
|
7
|
+
LET b = [3, 4]
|
|
8
|
+
LET c = a + b
|
|
9
|
+
PRINT(LEN(c))
|
|
10
|
+
PRINT(c[2])
|
|
11
|
+
|
|
12
|
+
PUSH(arr, 40)
|
|
13
|
+
PRINT(LEN(arr))
|
|
14
|
+
PRINT(arr[3])
|
|
15
|
+
|
|
16
|
+
LET removed = POP(arr)
|
|
17
|
+
PRINT(removed)
|
|
18
|
+
PRINT(LEN(arr))
|
|
19
|
+
|
|
20
|
+
PRINT(5 & 3)
|
|
21
|
+
PRINT(5 | 3)
|
|
22
|
+
PRINT(1 << 3)
|
|
23
|
+
PRINT(16 >> 2)
|
|
24
|
+
|
|
25
|
+
PRINT(ABS(-42))
|
|
26
|
+
PRINT(MIN(10, 20))
|
|
27
|
+
PRINT(MAX(10, 20))
|
|
28
|
+
PRINT(SQRT(16))
|
|
29
|
+
PRINT(POW(2, 10))
|
|
30
|
+
|
|
31
|
+
PRINT(CHAR(65))
|
|
32
|
+
PRINT(ORD("Z"))
|
|
33
|
+
|
|
34
|
+
LET s = "hello"
|
|
35
|
+
PRINT(TO_UPPER(s))
|
|
36
|
+
PRINT(TO_LOWER(s))
|
|
37
|
+
PRINT(CHAR_AT(s, 1))
|
|
38
|
+
PRINT(SUBSTR(s, 1, 3))
|
|
39
|
+
PRINT(TRIM(" hi "))
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Test: Recursion - factorial and fibonacci
|
|
2
|
+
FUNC! factorial(n):
|
|
3
|
+
IF? n <= 1:
|
|
4
|
+
RETURN 1
|
|
5
|
+
END!
|
|
6
|
+
RETURN n * factorial(n - 1)
|
|
7
|
+
END!
|
|
8
|
+
|
|
9
|
+
FUNC! fibonacci(n):
|
|
10
|
+
IF? n <= 0:
|
|
11
|
+
RETURN 0
|
|
12
|
+
END!
|
|
13
|
+
IF? n == 1:
|
|
14
|
+
RETURN 1
|
|
15
|
+
END!
|
|
16
|
+
RETURN fibonacci(n - 1) + fibonacci(n - 2)
|
|
17
|
+
END!
|
|
18
|
+
|
|
19
|
+
PRINT "Recursion tests:"
|
|
20
|
+
PRINT factorial(5)
|
|
21
|
+
PRINT factorial(10)
|
|
22
|
+
PRINT fibonacci(10)
|
|
23
|
+
PRINT fibonacci(15)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Test: String operations
|
|
2
|
+
PRINT "String tests:"
|
|
3
|
+
PRINT "Hello" + " " + "World"
|
|
4
|
+
PRINT LEN("Nebulara")
|
|
5
|
+
PRINT TO_STRING(42)
|
|
6
|
+
PRINT TO_NUMBER("123") + 7
|
|
7
|
+
PRINT TYPEOF("hello")
|
|
8
|
+
PRINT TYPEOF(42)
|
|
9
|
+
PRINT TRUE
|
|
10
|
+
PRINT FALSE
|
|
11
|
+
PRINT NULL
|
|
12
|
+
PRINT TYPEOF(TRUE)
|
|
13
|
+
PRINT TYPEOF(FALSE)
|
|
14
|
+
PRINT TYPEOF(NULL)
|