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.
Files changed (48) hide show
  1. package/Compiler/nbs-bootstrap.c +2229 -0
  2. package/Compiler/nbs_cli.c +1553 -0
  3. package/Compiler/neb-cli.exe +0 -0
  4. package/Compiler/neb-codegen.c +287 -0
  5. package/Compiler/neb-ffi.c +303 -0
  6. package/Compiler/neb-ir.c +307 -0
  7. package/Compiler/neb-knowledge.c +203 -0
  8. package/Compiler/neb-pipeline.c +787 -0
  9. package/Compiler/neb-semantic.c +261 -0
  10. package/Compiler/nebulara.exe +0 -0
  11. package/README.md +258 -0
  12. package/SPEC.md +267 -0
  13. package/bin/neb.js +36 -0
  14. package/build/neb-cli.exe +0 -0
  15. package/build/neb-codegen.exe +0 -0
  16. package/build/neb-ffi.exe +0 -0
  17. package/build/neb-knowledge.exe +0 -0
  18. package/build/neb-pipeline.exe +0 -0
  19. package/build/nebulara.exe +0 -0
  20. package/dist/index.js +131 -0
  21. package/package.json +39 -0
  22. package/std/collections.nbs +72 -0
  23. package/std/json.nbs +15 -0
  24. package/std/kanban.nbs +122 -0
  25. package/std/math.nbs +52 -0
  26. package/std/net.nbs +22 -0
  27. package/std/primitives.nbs +30 -0
  28. package/std/string.nbs +71 -0
  29. package/std/time.nbs +15 -0
  30. package/test/broken.nbs +2 -0
  31. package/test/hello.nbs +6 -0
  32. package/test/test-arrays.nbs +22 -0
  33. package/test/test-charat.nbs +7 -0
  34. package/test/test-cont-debug.nbs +8 -0
  35. package/test/test-cont-min.nbs +7 -0
  36. package/test/test-cont-parens.nbs +7 -0
  37. package/test/test-cont2.nbs +7 -0
  38. package/test/test-cont3.nbs +7 -0
  39. package/test/test-control.nbs +18 -0
  40. package/test/test-functions.nbs +13 -0
  41. package/test/test-loops.nbs +17 -0
  42. package/test/test-mod-for.nbs +6 -0
  43. package/test/test-mod.nbs +5 -0
  44. package/test/test-new-features.nbs +39 -0
  45. package/test/test-recursion.nbs +23 -0
  46. package/test/test-runtime.nbs +8 -0
  47. package/test/test-strings.nbs +14 -0
  48. 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!
@@ -0,0 +1,2 @@
1
+ LET x =
2
+ PRINT(x + )
package/test/hello.nbs ADDED
@@ -0,0 +1,6 @@
1
+ # Test Program - basic functionality
2
+ PRINT "Hello from Nebulara!"
3
+ PRINT 42
4
+ LET x = 10
5
+ LET y = 20
6
+ PRINT x + y
@@ -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,7 @@
1
+ LET s = "hello"
2
+ LET c = CHAR_AT(s, 0)
3
+ PRINT(c)
4
+ LET c2 = CHAR_AT(s, 1)
5
+ PRINT(c2)
6
+ LET c3 = CHAR_AT(s, 4)
7
+ PRINT(c3)
@@ -0,0 +1,8 @@
1
+ # Minimal CONTINUE test
2
+ LET i = 0
3
+ FOR! j = 1 TO 5:
4
+ j = j + 1
5
+ CONTINUE
6
+ PRINT j
7
+ END!
8
+ PRINT "done"
@@ -0,0 +1,7 @@
1
+ # Minimal CONTINUE test
2
+ FOR! i = 1 TO 5:
3
+ IF? i == 3:
4
+ CONTINUE
5
+ END!
6
+ PRINT i
7
+ END!
@@ -0,0 +1,7 @@
1
+ # Test: modulo comparison with parens
2
+ FOR! m = 1 TO 10:
3
+ IF? (m % 2) == 0:
4
+ CONTINUE
5
+ END!
6
+ PRINT m
7
+ END!
@@ -0,0 +1,7 @@
1
+ # CONTINUE test without modulo
2
+ FOR! m = 1 TO 10:
3
+ IF? m == 5:
4
+ CONTINUE
5
+ END!
6
+ PRINT m
7
+ END!
@@ -0,0 +1,7 @@
1
+ # CONTINUE with modulo
2
+ FOR! m = 1 TO 10:
3
+ IF? m % 2 == 0:
4
+ CONTINUE
5
+ END!
6
+ PRINT m
7
+ END!
@@ -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,13 @@
1
+ # Test: Functions with parameters
2
+ FUNC! add(a, b):
3
+ RETURN a + b
4
+ END!
5
+
6
+ FUNC! multiply(a, b):
7
+ RETURN a * b
8
+ END!
9
+
10
+ PRINT "Function tests:"
11
+ PRINT add(3, 4)
12
+ PRINT multiply(5, 6)
13
+ PRINT add(10, 20)
@@ -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,6 @@
1
+ # Test modulo comparison without CONTINUE
2
+ FOR! m = 1 TO 10:
3
+ IF? m % 2 == 0:
4
+ PRINT m
5
+ END!
6
+ END!
@@ -0,0 +1,5 @@
1
+ # Minimal modulo test
2
+ LET m = 4
3
+ PRINT m % 2
4
+ LET n = 5
5
+ PRINT n % 2
@@ -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,8 @@
1
+ LET t1 = TIME()
2
+ PRINT("Time1: " + TO_STRING(t1))
3
+ LET t2 = TIME()
4
+ PRINT("Time2: " + TO_STRING(t2))
5
+ LET r1 = RANDOM()
6
+ PRINT("Random1: " + TO_STRING(r1))
7
+ LET r2 = RANDOM()
8
+ PRINT("Random2: " + TO_STRING(r2))
@@ -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)
@@ -0,0 +1,11 @@
1
+ TRY!:
2
+ PRINT("try start")
3
+ THROW "something went wrong"
4
+ PRINT("should not print")
5
+ CATCH! err:
6
+ PRINT("caught: " + err)
7
+ ENDTRY!
8
+ PRINT("after try")
9
+
10
+ LET x = 5
11
+ PRINT(x)