@rcrsr/rill 0.1.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 (295) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +187 -0
  3. package/dist/cli.d.ts +11 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +69 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/demo.d.ts +6 -0
  8. package/dist/demo.d.ts.map +1 -0
  9. package/dist/demo.js +121 -0
  10. package/dist/demo.js.map +1 -0
  11. package/dist/index.d.ts +10 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +9 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/lexer/errors.d.ts +9 -0
  16. package/dist/lexer/errors.d.ts.map +1 -0
  17. package/dist/lexer/errors.js +12 -0
  18. package/dist/lexer/errors.js.map +1 -0
  19. package/dist/lexer/helpers.d.ts +14 -0
  20. package/dist/lexer/helpers.d.ts.map +1 -0
  21. package/dist/lexer/helpers.js +30 -0
  22. package/dist/lexer/helpers.js.map +1 -0
  23. package/dist/lexer/index.d.ts +8 -0
  24. package/dist/lexer/index.d.ts.map +1 -0
  25. package/dist/lexer/index.js +8 -0
  26. package/dist/lexer/index.js.map +1 -0
  27. package/dist/lexer/operators.d.ts +11 -0
  28. package/dist/lexer/operators.d.ts.map +1 -0
  29. package/dist/lexer/operators.js +58 -0
  30. package/dist/lexer/operators.js.map +1 -0
  31. package/dist/lexer/readers.d.ts +12 -0
  32. package/dist/lexer/readers.d.ts.map +1 -0
  33. package/dist/lexer/readers.js +144 -0
  34. package/dist/lexer/readers.js.map +1 -0
  35. package/dist/lexer/state.d.ts +18 -0
  36. package/dist/lexer/state.d.ts.map +1 -0
  37. package/dist/lexer/state.js +37 -0
  38. package/dist/lexer/state.js.map +1 -0
  39. package/dist/lexer/tokenizer.d.ts +9 -0
  40. package/dist/lexer/tokenizer.d.ts.map +1 -0
  41. package/dist/lexer/tokenizer.js +100 -0
  42. package/dist/lexer/tokenizer.js.map +1 -0
  43. package/dist/lexer.d.ts +19 -0
  44. package/dist/lexer.d.ts.map +1 -0
  45. package/dist/lexer.js +344 -0
  46. package/dist/lexer.js.map +1 -0
  47. package/dist/parser/arithmetic.d.ts +16 -0
  48. package/dist/parser/arithmetic.d.ts.map +1 -0
  49. package/dist/parser/arithmetic.js +128 -0
  50. package/dist/parser/arithmetic.js.map +1 -0
  51. package/dist/parser/boolean.d.ts +15 -0
  52. package/dist/parser/boolean.d.ts.map +1 -0
  53. package/dist/parser/boolean.js +20 -0
  54. package/dist/parser/boolean.js.map +1 -0
  55. package/dist/parser/control-flow.d.ts +56 -0
  56. package/dist/parser/control-flow.d.ts.map +1 -0
  57. package/dist/parser/control-flow.js +167 -0
  58. package/dist/parser/control-flow.js.map +1 -0
  59. package/dist/parser/expressions.d.ts +23 -0
  60. package/dist/parser/expressions.d.ts.map +1 -0
  61. package/dist/parser/expressions.js +950 -0
  62. package/dist/parser/expressions.js.map +1 -0
  63. package/dist/parser/extraction.d.ts +48 -0
  64. package/dist/parser/extraction.d.ts.map +1 -0
  65. package/dist/parser/extraction.js +279 -0
  66. package/dist/parser/extraction.js.map +1 -0
  67. package/dist/parser/functions.d.ts +20 -0
  68. package/dist/parser/functions.d.ts.map +1 -0
  69. package/dist/parser/functions.js +96 -0
  70. package/dist/parser/functions.js.map +1 -0
  71. package/dist/parser/helpers.d.ts +94 -0
  72. package/dist/parser/helpers.d.ts.map +1 -0
  73. package/dist/parser/helpers.js +225 -0
  74. package/dist/parser/helpers.js.map +1 -0
  75. package/dist/parser/index.d.ts +49 -0
  76. package/dist/parser/index.d.ts.map +1 -0
  77. package/dist/parser/index.js +73 -0
  78. package/dist/parser/index.js.map +1 -0
  79. package/dist/parser/literals.d.ts +37 -0
  80. package/dist/parser/literals.d.ts.map +1 -0
  81. package/dist/parser/literals.js +373 -0
  82. package/dist/parser/literals.js.map +1 -0
  83. package/dist/parser/parser-collect.d.ts +16 -0
  84. package/dist/parser/parser-collect.d.ts.map +1 -0
  85. package/dist/parser/parser-collect.js +125 -0
  86. package/dist/parser/parser-collect.js.map +1 -0
  87. package/dist/parser/parser-control.d.ts +20 -0
  88. package/dist/parser/parser-control.d.ts.map +1 -0
  89. package/dist/parser/parser-control.js +120 -0
  90. package/dist/parser/parser-control.js.map +1 -0
  91. package/dist/parser/parser-expr.d.ts +37 -0
  92. package/dist/parser/parser-expr.d.ts.map +1 -0
  93. package/dist/parser/parser-expr.js +639 -0
  94. package/dist/parser/parser-expr.js.map +1 -0
  95. package/dist/parser/parser-extract.d.ts +17 -0
  96. package/dist/parser/parser-extract.d.ts.map +1 -0
  97. package/dist/parser/parser-extract.js +222 -0
  98. package/dist/parser/parser-extract.js.map +1 -0
  99. package/dist/parser/parser-functions.d.ts +21 -0
  100. package/dist/parser/parser-functions.d.ts.map +1 -0
  101. package/dist/parser/parser-functions.js +155 -0
  102. package/dist/parser/parser-functions.js.map +1 -0
  103. package/dist/parser/parser-literals.d.ts +22 -0
  104. package/dist/parser/parser-literals.d.ts.map +1 -0
  105. package/dist/parser/parser-literals.js +288 -0
  106. package/dist/parser/parser-literals.js.map +1 -0
  107. package/dist/parser/parser-script.d.ts +21 -0
  108. package/dist/parser/parser-script.d.ts.map +1 -0
  109. package/dist/parser/parser-script.js +174 -0
  110. package/dist/parser/parser-script.js.map +1 -0
  111. package/dist/parser/parser-variables.d.ts +20 -0
  112. package/dist/parser/parser-variables.d.ts.map +1 -0
  113. package/dist/parser/parser-variables.js +146 -0
  114. package/dist/parser/parser-variables.js.map +1 -0
  115. package/dist/parser/parser.d.ts +49 -0
  116. package/dist/parser/parser.d.ts.map +1 -0
  117. package/dist/parser/parser.js +54 -0
  118. package/dist/parser/parser.js.map +1 -0
  119. package/dist/parser/script.d.ts +14 -0
  120. package/dist/parser/script.d.ts.map +1 -0
  121. package/dist/parser/script.js +196 -0
  122. package/dist/parser/script.js.map +1 -0
  123. package/dist/parser/state.d.ts +40 -0
  124. package/dist/parser/state.d.ts.map +1 -0
  125. package/dist/parser/state.js +129 -0
  126. package/dist/parser/state.js.map +1 -0
  127. package/dist/parser/variables.d.ts +10 -0
  128. package/dist/parser/variables.d.ts.map +1 -0
  129. package/dist/parser/variables.js +215 -0
  130. package/dist/parser/variables.js.map +1 -0
  131. package/dist/runtime/ast-equals.d.ts +13 -0
  132. package/dist/runtime/ast-equals.d.ts.map +1 -0
  133. package/dist/runtime/ast-equals.js +447 -0
  134. package/dist/runtime/ast-equals.js.map +1 -0
  135. package/dist/runtime/builtins.d.ts +13 -0
  136. package/dist/runtime/builtins.d.ts.map +1 -0
  137. package/dist/runtime/builtins.js +180 -0
  138. package/dist/runtime/builtins.js.map +1 -0
  139. package/dist/runtime/callable.d.ts +88 -0
  140. package/dist/runtime/callable.d.ts.map +1 -0
  141. package/dist/runtime/callable.js +98 -0
  142. package/dist/runtime/callable.js.map +1 -0
  143. package/dist/runtime/context.d.ts +13 -0
  144. package/dist/runtime/context.d.ts.map +1 -0
  145. package/dist/runtime/context.js +73 -0
  146. package/dist/runtime/context.js.map +1 -0
  147. package/dist/runtime/core/callable.d.ts +171 -0
  148. package/dist/runtime/core/callable.d.ts.map +1 -0
  149. package/dist/runtime/core/callable.js +246 -0
  150. package/dist/runtime/core/callable.js.map +1 -0
  151. package/dist/runtime/core/context.d.ts +29 -0
  152. package/dist/runtime/core/context.d.ts.map +1 -0
  153. package/dist/runtime/core/context.js +154 -0
  154. package/dist/runtime/core/context.js.map +1 -0
  155. package/dist/runtime/core/equals.d.ts +9 -0
  156. package/dist/runtime/core/equals.d.ts.map +1 -0
  157. package/dist/runtime/core/equals.js +381 -0
  158. package/dist/runtime/core/equals.js.map +1 -0
  159. package/dist/runtime/core/eval/base.d.ts +65 -0
  160. package/dist/runtime/core/eval/base.d.ts.map +1 -0
  161. package/dist/runtime/core/eval/base.js +112 -0
  162. package/dist/runtime/core/eval/base.js.map +1 -0
  163. package/dist/runtime/core/eval/evaluator.d.ts +47 -0
  164. package/dist/runtime/core/eval/evaluator.d.ts.map +1 -0
  165. package/dist/runtime/core/eval/evaluator.js +73 -0
  166. package/dist/runtime/core/eval/evaluator.js.map +1 -0
  167. package/dist/runtime/core/eval/index.d.ts +57 -0
  168. package/dist/runtime/core/eval/index.d.ts.map +1 -0
  169. package/dist/runtime/core/eval/index.js +95 -0
  170. package/dist/runtime/core/eval/index.js.map +1 -0
  171. package/dist/runtime/core/eval/mixins/annotations.d.ts +19 -0
  172. package/dist/runtime/core/eval/mixins/annotations.d.ts.map +1 -0
  173. package/dist/runtime/core/eval/mixins/annotations.js +146 -0
  174. package/dist/runtime/core/eval/mixins/annotations.js.map +1 -0
  175. package/dist/runtime/core/eval/mixins/closures.d.ts +49 -0
  176. package/dist/runtime/core/eval/mixins/closures.d.ts.map +1 -0
  177. package/dist/runtime/core/eval/mixins/closures.js +479 -0
  178. package/dist/runtime/core/eval/mixins/closures.js.map +1 -0
  179. package/dist/runtime/core/eval/mixins/collections.d.ts +24 -0
  180. package/dist/runtime/core/eval/mixins/collections.d.ts.map +1 -0
  181. package/dist/runtime/core/eval/mixins/collections.js +466 -0
  182. package/dist/runtime/core/eval/mixins/collections.js.map +1 -0
  183. package/dist/runtime/core/eval/mixins/control-flow.d.ts +27 -0
  184. package/dist/runtime/core/eval/mixins/control-flow.d.ts.map +1 -0
  185. package/dist/runtime/core/eval/mixins/control-flow.js +369 -0
  186. package/dist/runtime/core/eval/mixins/control-flow.js.map +1 -0
  187. package/dist/runtime/core/eval/mixins/core.d.ts +24 -0
  188. package/dist/runtime/core/eval/mixins/core.d.ts.map +1 -0
  189. package/dist/runtime/core/eval/mixins/core.js +335 -0
  190. package/dist/runtime/core/eval/mixins/core.js.map +1 -0
  191. package/dist/runtime/core/eval/mixins/expressions.d.ts +19 -0
  192. package/dist/runtime/core/eval/mixins/expressions.d.ts.map +1 -0
  193. package/dist/runtime/core/eval/mixins/expressions.js +202 -0
  194. package/dist/runtime/core/eval/mixins/expressions.js.map +1 -0
  195. package/dist/runtime/core/eval/mixins/extraction.d.ts +10 -0
  196. package/dist/runtime/core/eval/mixins/extraction.d.ts.map +1 -0
  197. package/dist/runtime/core/eval/mixins/extraction.js +250 -0
  198. package/dist/runtime/core/eval/mixins/extraction.js.map +1 -0
  199. package/dist/runtime/core/eval/mixins/literals.d.ts +23 -0
  200. package/dist/runtime/core/eval/mixins/literals.d.ts.map +1 -0
  201. package/dist/runtime/core/eval/mixins/literals.js +180 -0
  202. package/dist/runtime/core/eval/mixins/literals.js.map +1 -0
  203. package/dist/runtime/core/eval/mixins/types.d.ts +20 -0
  204. package/dist/runtime/core/eval/mixins/types.d.ts.map +1 -0
  205. package/dist/runtime/core/eval/mixins/types.js +109 -0
  206. package/dist/runtime/core/eval/mixins/types.js.map +1 -0
  207. package/dist/runtime/core/eval/mixins/variables.d.ts +34 -0
  208. package/dist/runtime/core/eval/mixins/variables.d.ts.map +1 -0
  209. package/dist/runtime/core/eval/mixins/variables.js +247 -0
  210. package/dist/runtime/core/eval/mixins/variables.js.map +1 -0
  211. package/dist/runtime/core/eval/types.d.ts +41 -0
  212. package/dist/runtime/core/eval/types.d.ts.map +1 -0
  213. package/dist/runtime/core/eval/types.js +10 -0
  214. package/dist/runtime/core/eval/types.js.map +1 -0
  215. package/dist/runtime/core/evaluate.d.ts +42 -0
  216. package/dist/runtime/core/evaluate.d.ts.map +1 -0
  217. package/dist/runtime/core/evaluate.debug.js +1251 -0
  218. package/dist/runtime/core/evaluate.js +1913 -0
  219. package/dist/runtime/core/evaluate.js.map +1 -0
  220. package/dist/runtime/core/execute.d.ts +26 -0
  221. package/dist/runtime/core/execute.d.ts.map +1 -0
  222. package/dist/runtime/core/execute.js +177 -0
  223. package/dist/runtime/core/execute.js.map +1 -0
  224. package/dist/runtime/core/signals.d.ts +19 -0
  225. package/dist/runtime/core/signals.d.ts.map +1 -0
  226. package/dist/runtime/core/signals.js +26 -0
  227. package/dist/runtime/core/signals.js.map +1 -0
  228. package/dist/runtime/core/types.d.ts +177 -0
  229. package/dist/runtime/core/types.d.ts.map +1 -0
  230. package/dist/runtime/core/types.js +50 -0
  231. package/dist/runtime/core/types.js.map +1 -0
  232. package/dist/runtime/core/values.d.ts +66 -0
  233. package/dist/runtime/core/values.d.ts.map +1 -0
  234. package/dist/runtime/core/values.js +240 -0
  235. package/dist/runtime/core/values.js.map +1 -0
  236. package/dist/runtime/evaluate.d.ts +32 -0
  237. package/dist/runtime/evaluate.d.ts.map +1 -0
  238. package/dist/runtime/evaluate.js +1111 -0
  239. package/dist/runtime/evaluate.js.map +1 -0
  240. package/dist/runtime/execute.d.ts +26 -0
  241. package/dist/runtime/execute.d.ts.map +1 -0
  242. package/dist/runtime/execute.js +121 -0
  243. package/dist/runtime/execute.js.map +1 -0
  244. package/dist/runtime/ext/builtins.d.ts +16 -0
  245. package/dist/runtime/ext/builtins.d.ts.map +1 -0
  246. package/dist/runtime/ext/builtins.js +528 -0
  247. package/dist/runtime/ext/builtins.js.map +1 -0
  248. package/dist/runtime/ext/content-parser.d.ts +83 -0
  249. package/dist/runtime/ext/content-parser.d.ts.map +1 -0
  250. package/dist/runtime/ext/content-parser.js +536 -0
  251. package/dist/runtime/ext/content-parser.js.map +1 -0
  252. package/dist/runtime/index.d.ts +28 -0
  253. package/dist/runtime/index.d.ts.map +1 -0
  254. package/dist/runtime/index.js +34 -0
  255. package/dist/runtime/index.js.map +1 -0
  256. package/dist/runtime/signals.d.ts +19 -0
  257. package/dist/runtime/signals.d.ts.map +1 -0
  258. package/dist/runtime/signals.js +26 -0
  259. package/dist/runtime/signals.js.map +1 -0
  260. package/dist/runtime/types.d.ts +169 -0
  261. package/dist/runtime/types.d.ts.map +1 -0
  262. package/dist/runtime/types.js +50 -0
  263. package/dist/runtime/types.js.map +1 -0
  264. package/dist/runtime/values.d.ts +50 -0
  265. package/dist/runtime/values.d.ts.map +1 -0
  266. package/dist/runtime/values.js +209 -0
  267. package/dist/runtime/values.js.map +1 -0
  268. package/dist/runtime.d.ts +254 -0
  269. package/dist/runtime.d.ts.map +1 -0
  270. package/dist/runtime.js +2014 -0
  271. package/dist/runtime.js.map +1 -0
  272. package/dist/types.d.ts +752 -0
  273. package/dist/types.d.ts.map +1 -0
  274. package/dist/types.js +189 -0
  275. package/dist/types.js.map +1 -0
  276. package/docs/00_INDEX.md +65 -0
  277. package/docs/01_guide.md +390 -0
  278. package/docs/02_types.md +399 -0
  279. package/docs/03_variables.md +314 -0
  280. package/docs/04_operators.md +551 -0
  281. package/docs/05_control-flow.md +350 -0
  282. package/docs/06_closures.md +353 -0
  283. package/docs/07_collections.md +686 -0
  284. package/docs/08_iterators.md +330 -0
  285. package/docs/09_strings.md +205 -0
  286. package/docs/10_parsing.md +366 -0
  287. package/docs/11_reference.md +350 -0
  288. package/docs/12_examples.md +771 -0
  289. package/docs/13_modules.md +519 -0
  290. package/docs/14_host-integration.md +826 -0
  291. package/docs/15_grammar.ebnf +693 -0
  292. package/docs/16_conventions.md +696 -0
  293. package/docs/99_llm-reference.txt +300 -0
  294. package/docs/assets/logo.png +0 -0
  295. package/package.json +70 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Parser Helpers
3
+ * Lookahead predicates and utility parsing functions
4
+ * @internal This module contains internal parser utilities
5
+ */
6
+ import { ParseError, TOKEN_TYPES } from '../types.js';
7
+ import { check, peek, expect } from './state.js';
8
+ // ============================================================
9
+ // VALID TYPE NAMES
10
+ // ============================================================
11
+ /** @internal */
12
+ export const VALID_TYPE_NAMES = [
13
+ 'string',
14
+ 'number',
15
+ 'bool',
16
+ 'closure',
17
+ 'list',
18
+ 'dict',
19
+ 'tuple',
20
+ ];
21
+ /** @internal */
22
+ export const FUNC_PARAM_TYPES = ['string', 'number', 'bool'];
23
+ // ============================================================
24
+ // LOOKAHEAD PREDICATES
25
+ // ============================================================
26
+ /**
27
+ * Check for function call: identifier( or namespace::func(
28
+ * Supports: func(), ns::func(), ns::sub::func()
29
+ * @internal
30
+ */
31
+ export function isHostCall(state) {
32
+ if (!check(state, TOKEN_TYPES.IDENTIFIER)) {
33
+ return false;
34
+ }
35
+ // Simple case: identifier(
36
+ if (peek(state, 1).type === TOKEN_TYPES.LPAREN) {
37
+ return true;
38
+ }
39
+ // Namespaced case: identifier::identifier(
40
+ // Scan ahead for pattern: IDENT (:: IDENT)* (
41
+ let offset = 1;
42
+ while (peek(state, offset).type === TOKEN_TYPES.DOUBLE_COLON) {
43
+ offset++; // skip ::
44
+ if (peek(state, offset).type !== TOKEN_TYPES.IDENTIFIER) {
45
+ return false; // :: must be followed by identifier
46
+ }
47
+ offset++; // skip identifier
48
+ }
49
+ // If we consumed at least one ::, check for (
50
+ return offset > 1 && peek(state, offset).type === TOKEN_TYPES.LPAREN;
51
+ }
52
+ /**
53
+ * Check for simple closure call: $name(
54
+ * Used in expression context where $var.method() should be parsed as Variable + MethodCall
55
+ * @internal
56
+ */
57
+ export function isClosureCall(state) {
58
+ return (check(state, TOKEN_TYPES.DOLLAR) &&
59
+ peek(state, 1).type === TOKEN_TYPES.IDENTIFIER &&
60
+ peek(state, 2).type === TOKEN_TYPES.LPAREN);
61
+ }
62
+ /**
63
+ * Check for closure call with property access: $name( or $name.prop...(
64
+ * Used in pipe target context where $dict.closure() should invoke the closure
65
+ * @internal
66
+ */
67
+ export function isClosureCallWithAccess(state) {
68
+ if (!check(state, TOKEN_TYPES.DOLLAR))
69
+ return false;
70
+ if (peek(state, 1).type !== TOKEN_TYPES.IDENTIFIER)
71
+ return false;
72
+ // Scan through .identifier chains to find terminal (
73
+ let offset = 2;
74
+ while (peek(state, offset).type === TOKEN_TYPES.DOT) {
75
+ offset++; // skip .
76
+ if (peek(state, offset).type !== TOKEN_TYPES.IDENTIFIER)
77
+ return false;
78
+ offset++; // skip identifier
79
+ }
80
+ return peek(state, offset).type === TOKEN_TYPES.LPAREN;
81
+ }
82
+ /**
83
+ * Check for pipe invoke: $( (invoke pipe value as closure)
84
+ * @internal
85
+ */
86
+ export function canStartPipeInvoke(state) {
87
+ return (check(state, TOKEN_TYPES.PIPE_VAR) &&
88
+ peek(state, 1).type === TOKEN_TYPES.LPAREN);
89
+ }
90
+ /**
91
+ * Check for method call: .identifier
92
+ * @internal
93
+ */
94
+ export function isMethodCall(state) {
95
+ return (check(state, TOKEN_TYPES.DOT) &&
96
+ peek(state, 1).type === TOKEN_TYPES.IDENTIFIER);
97
+ }
98
+ /**
99
+ * Check for sequential spread target: @$ or @[ (not @{ which is for-loop)
100
+ * @internal
101
+ */
102
+ export function isClosureChainTarget(state) {
103
+ return (check(state, TOKEN_TYPES.AT) &&
104
+ (peek(state, 1).type === TOKEN_TYPES.DOLLAR ||
105
+ peek(state, 1).type === TOKEN_TYPES.LBRACKET));
106
+ }
107
+ /**
108
+ * Check for negative number: -42
109
+ * @internal
110
+ */
111
+ export function isNegativeNumber(state) {
112
+ return (check(state, TOKEN_TYPES.MINUS) &&
113
+ peek(state, 1).type === TOKEN_TYPES.NUMBER);
114
+ }
115
+ /**
116
+ * Check for dict start: identifier followed by colon
117
+ * @internal
118
+ */
119
+ export function isDictStart(state) {
120
+ return (check(state, TOKEN_TYPES.IDENTIFIER) &&
121
+ peek(state, 1).type === TOKEN_TYPES.COLON);
122
+ }
123
+ /**
124
+ * Check for method call with args (for field access termination): .identifier(
125
+ * @internal
126
+ */
127
+ export function isMethodCallWithArgs(state) {
128
+ return (peek(state, 1).type === TOKEN_TYPES.IDENTIFIER &&
129
+ peek(state, 2).type === TOKEN_TYPES.LPAREN);
130
+ }
131
+ /**
132
+ * Check for literal start (not LPAREN - that's now grouping)
133
+ * @internal
134
+ */
135
+ export function isLiteralStart(state) {
136
+ return check(state, TOKEN_TYPES.STRING, TOKEN_TYPES.NUMBER, TOKEN_TYPES.TRUE, TOKEN_TYPES.FALSE, TOKEN_TYPES.LBRACKET);
137
+ }
138
+ /**
139
+ * Check if current token can start an expression (for bare spread detection)
140
+ * @internal
141
+ */
142
+ export function canStartExpression(state) {
143
+ return (isLiteralStart(state) ||
144
+ isClosureStart(state) ||
145
+ check(state, TOKEN_TYPES.DOLLAR, TOKEN_TYPES.PIPE_VAR, TOKEN_TYPES.IDENTIFIER, TOKEN_TYPES.DOT, TOKEN_TYPES.LPAREN, TOKEN_TYPES.LBRACE, TOKEN_TYPES.AT, TOKEN_TYPES.QUESTION, TOKEN_TYPES.BANG, TOKEN_TYPES.STAR, TOKEN_TYPES.MINUS));
146
+ }
147
+ /**
148
+ * Check for closure start: | or ||
149
+ * - |params| body
150
+ * - || body (no-param closure)
151
+ * @internal
152
+ */
153
+ export function isClosureStart(state) {
154
+ return check(state, TOKEN_TYPES.PIPE_BAR, TOKEN_TYPES.OR);
155
+ }
156
+ // ============================================================
157
+ // UTILITY PARSING FUNCTIONS
158
+ // ============================================================
159
+ /**
160
+ * Parse and validate a type name from an identifier token.
161
+ * Throws ParseError if the type is not in the allowed list.
162
+ * @internal
163
+ */
164
+ export function parseTypeName(state, validTypes) {
165
+ const typeToken = expect(state, TOKEN_TYPES.IDENTIFIER, 'Expected type name');
166
+ if (!validTypes.includes(typeToken.value)) {
167
+ throw new ParseError(`Invalid type: ${typeToken.value} (expected: ${validTypes.join(', ')})`, typeToken.span.start);
168
+ }
169
+ return typeToken.value;
170
+ }
171
+ /**
172
+ * Create a block containing a single boolean literal statement
173
+ * @internal
174
+ */
175
+ export function makeBoolLiteralBlock(value, span) {
176
+ return {
177
+ type: 'Block',
178
+ statements: [
179
+ {
180
+ type: 'Statement',
181
+ expression: {
182
+ type: 'PipeChain',
183
+ head: {
184
+ type: 'PostfixExpr',
185
+ primary: { type: 'BoolLiteral', value, span },
186
+ methods: [],
187
+ span,
188
+ },
189
+ pipes: [],
190
+ terminator: null,
191
+ span,
192
+ },
193
+ span,
194
+ },
195
+ ],
196
+ span,
197
+ };
198
+ }
199
+ // Note: parseArgumentList is defined in expressions.ts to avoid circular dependencies
200
+ // since it depends on parseExpression
201
+ // ============================================================
202
+ // BARE HOST CALL PARSING
203
+ // ============================================================
204
+ /**
205
+ * Parse a bare function name (no parens): `func` or `ns::func` or `ns::sub::func`
206
+ * Returns a HostCallNode with empty args.
207
+ * @internal
208
+ */
209
+ export function parseBareHostCall(state) {
210
+ const start = state.tokens[state.pos].span.start;
211
+ let name = expect(state, TOKEN_TYPES.IDENTIFIER, 'Expected identifier').value;
212
+ // Collect namespaced name: ident::ident::...
213
+ while (check(state, TOKEN_TYPES.DOUBLE_COLON)) {
214
+ state.pos++; // consume ::
215
+ const next = expect(state, TOKEN_TYPES.IDENTIFIER, 'Expected identifier after ::');
216
+ name += '::' + next.value;
217
+ }
218
+ return {
219
+ type: 'HostCall',
220
+ name,
221
+ args: [],
222
+ span: { start, end: state.tokens[state.pos - 1].span.end },
223
+ };
224
+ }
225
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/parser/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Rill Parser
3
+ * Main entry point and re-exports
4
+ */
5
+ import type { ParseResult, ScriptNode } from '../types.js';
6
+ import './parser-script.js';
7
+ import './parser-expr.js';
8
+ import './parser-literals.js';
9
+ import './parser-variables.js';
10
+ import './parser-control.js';
11
+ import './parser-functions.js';
12
+ import './parser-collect.js';
13
+ import './parser-extract.js';
14
+ /**
15
+ * Parse rill source code into an AST.
16
+ *
17
+ * Throws ParseError on first syntax error.
18
+ *
19
+ * @param source - The source code to parse
20
+ * @returns The parsed AST (ScriptNode)
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const ast = parse(source);
25
+ * ```
26
+ */
27
+ export declare function parse(source: string): ScriptNode;
28
+ /**
29
+ * Parse rill source code with error recovery for IDE/tooling scenarios.
30
+ *
31
+ * Instead of throwing on first error, collects errors and returns
32
+ * a partial AST with ErrorNode entries where parsing failed.
33
+ *
34
+ * @param source - The source code to parse
35
+ * @returns ParseResult with AST, errors array, and success flag
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const result = parseWithRecovery(source);
40
+ * if (!result.success) {
41
+ * console.log('Errors:', result.errors);
42
+ * }
43
+ * // AST may contain ErrorNode entries in statements
44
+ * ```
45
+ */
46
+ export declare function parseWithRecovery(source: string): ParseResult;
47
+ export { createParserState, type ParserState } from './state.js';
48
+ export { Parser } from './parser.js';
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK3D,OAAO,oBAAoB,CAAC;AAC5B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAM7B;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAIhD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAU7D;AAOD,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Rill Parser
3
+ * Main entry point and re-exports
4
+ */
5
+ import { tokenize } from '../lexer/index.js';
6
+ import { Parser } from './parser.js';
7
+ // Import extension modules to register prototype methods on Parser.
8
+ // These must be imported AFTER parser.js to ensure the class is defined.
9
+ import './parser-script.js';
10
+ import './parser-expr.js';
11
+ import './parser-literals.js';
12
+ import './parser-variables.js';
13
+ import './parser-control.js';
14
+ import './parser-functions.js';
15
+ import './parser-collect.js';
16
+ import './parser-extract.js';
17
+ // ============================================================
18
+ // MAIN ENTRY POINT
19
+ // ============================================================
20
+ /**
21
+ * Parse rill source code into an AST.
22
+ *
23
+ * Throws ParseError on first syntax error.
24
+ *
25
+ * @param source - The source code to parse
26
+ * @returns The parsed AST (ScriptNode)
27
+ *
28
+ * @example
29
+ * ```typescript
30
+ * const ast = parse(source);
31
+ * ```
32
+ */
33
+ export function parse(source) {
34
+ const tokens = tokenize(source);
35
+ const parser = new Parser(tokens, { recoveryMode: false, source: '' });
36
+ return parser.parse();
37
+ }
38
+ /**
39
+ * Parse rill source code with error recovery for IDE/tooling scenarios.
40
+ *
41
+ * Instead of throwing on first error, collects errors and returns
42
+ * a partial AST with ErrorNode entries where parsing failed.
43
+ *
44
+ * @param source - The source code to parse
45
+ * @returns ParseResult with AST, errors array, and success flag
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const result = parseWithRecovery(source);
50
+ * if (!result.success) {
51
+ * console.log('Errors:', result.errors);
52
+ * }
53
+ * // AST may contain ErrorNode entries in statements
54
+ * ```
55
+ */
56
+ export function parseWithRecovery(source) {
57
+ const tokens = tokenize(source);
58
+ const parser = new Parser(tokens, { recoveryMode: true, source });
59
+ const ast = parser.parse();
60
+ return {
61
+ ast,
62
+ errors: parser.errors,
63
+ success: parser.errors.length === 0,
64
+ };
65
+ }
66
+ // ============================================================
67
+ // RE-EXPORTS
68
+ // ============================================================
69
+ // State (for advanced usage)
70
+ export { createParserState } from './state.js';
71
+ // Parser class (for advanced usage)
72
+ export { Parser } from './parser.js';
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,oEAAoE;AACpE,yEAAyE;AACzE,OAAO,oBAAoB,CAAC;AAC5B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAE7B,+DAA+D;AAC/D,mBAAmB;AACnB,+DAA+D;AAE/D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,KAAK,CAAC,MAAc;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAE3B,OAAO;QACL,GAAG;QACH,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;AAE/D,6BAA6B;AAC7B,OAAO,EAAE,iBAAiB,EAAoB,MAAM,YAAY,CAAC;AAEjE,oCAAoC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Literal Parsing
3
+ * Strings, numbers, booleans, tuples, dicts, and closures
4
+ */
5
+ import type { BlockNode, DictNode, ExpressionNode, ClosureNode, GroupedExprNode, LiteralNode, PipeChainNode, PostfixExprNode, BodyNode, StringLiteralNode, TupleNode } from '../types.js';
6
+ import { type ParserState } from './state.js';
7
+ export declare function setParseExpression(fn: (state: ParserState) => ExpressionNode): void;
8
+ export declare function setParseBlock(fn: (state: ParserState) => BlockNode): void;
9
+ export declare function setParseGrouped(fn: (state: ParserState) => GroupedExprNode): void;
10
+ export declare function setParsePostfixExpr(fn: (state: ParserState) => PostfixExprNode): void;
11
+ export declare function setLiteralsParsePipeChain(fn: (state: ParserState) => PipeChainNode): void;
12
+ export declare function parseLiteral(state: ParserState): LiteralNode;
13
+ /**
14
+ * Parse a string literal, handling interpolation expressions.
15
+ * Interpolation uses {expr} syntax where expr is any valid expression.
16
+ * Escaped braces \{ and \} produce literal braces.
17
+ */
18
+ export declare function parseString(state: ParserState): StringLiteralNode;
19
+ export declare function parseTupleOrDict(state: ParserState): TupleNode | DictNode;
20
+ /**
21
+ * Parse closure: |params| body or || body
22
+ * Params can be: |x|, |x: string|, |x: string = "default"|
23
+ *
24
+ * Body can be:
25
+ * - Simple: |x| $x (postfix-expr)
26
+ * - Grouped: |x| ($x * 2) (compound expression)
27
+ * - Block: |x| { $a ↵ $b } (multiple statements)
28
+ */
29
+ export declare function parseClosure(state: ParserState): ClosureNode;
30
+ /**
31
+ * Parse simple-body: block, grouped, or postfix-expr
32
+ * No naked compound expressions — arithmetic/pipes/booleans must be grouped.
33
+ *
34
+ * Used by: closures, conditionals, loops
35
+ */
36
+ export declare function parseBody(state: ParserState): BodyNode;
37
+ //# sourceMappingURL=literals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literals.d.ts","sourceRoot":"","sources":["../../src/parser/literals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,SAAS,EAET,QAAQ,EACR,cAAc,EAEd,WAAW,EACX,eAAe,EAEf,WAAW,EACX,aAAa,EACb,eAAe,EACf,QAAQ,EAER,iBAAiB,EACjB,SAAS,EACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,KAAK,WAAW,EAQjB,MAAM,YAAY,CAAC;AAUpB,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,cAAc,GACzC,IAAI,CAEN;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,SAAS,GAAG,IAAI,CAEzE;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,eAAe,GAC1C,IAAI,CAEN;AAED,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,eAAe,GAC1C,IAAI,CAEN;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,aAAa,GACxC,IAAI,CAEN;AAMD,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CA2C5D;AAMD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAajE;AAwID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,CAoCzE;AA8DD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAsC5D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,CAmBtD"}