tova 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.
@@ -0,0 +1,214 @@
1
+ // Token type definitions for the Tova language
2
+
3
+ export const TokenType = {
4
+ // Literals
5
+ NUMBER: 'NUMBER',
6
+ STRING: 'STRING',
7
+ STRING_TEMPLATE: 'STRING_TEMPLATE',
8
+ BOOLEAN: 'BOOLEAN',
9
+ NIL: 'NIL',
10
+ IDENTIFIER: 'IDENTIFIER',
11
+
12
+ // Keywords
13
+ VAR: 'VAR',
14
+ LET: 'LET',
15
+ FN: 'FN',
16
+ RETURN: 'RETURN',
17
+ IF: 'IF',
18
+ ELIF: 'ELIF',
19
+ ELSE: 'ELSE',
20
+ FOR: 'FOR',
21
+ WHILE: 'WHILE',
22
+ MATCH: 'MATCH',
23
+ TYPE: 'TYPE',
24
+ IMPORT: 'IMPORT',
25
+ FROM: 'FROM',
26
+ EXPORT: 'EXPORT',
27
+ AS: 'AS',
28
+
29
+ // Boolean / logic keywords
30
+ AND: 'AND',
31
+ OR: 'OR',
32
+ NOT: 'NOT',
33
+ IN: 'IN',
34
+ TRUE: 'TRUE',
35
+ FALSE: 'FALSE',
36
+
37
+ // Control flow
38
+ BREAK: 'BREAK',
39
+ CONTINUE: 'CONTINUE',
40
+
41
+ // Error handling
42
+ TRY: 'TRY',
43
+ CATCH: 'CATCH',
44
+ FINALLY: 'FINALLY',
45
+
46
+ // Async
47
+ ASYNC: 'ASYNC',
48
+ AWAIT: 'AWAIT',
49
+
50
+ // Guard
51
+ GUARD: 'GUARD',
52
+
53
+ // Interface
54
+ INTERFACE: 'INTERFACE',
55
+ DERIVE: 'DERIVE',
56
+
57
+ // Visibility
58
+ PUB: 'PUB',
59
+
60
+ // Impl blocks / traits
61
+ IMPL: 'IMPL',
62
+ TRAIT: 'TRAIT',
63
+
64
+ // Defer
65
+ DEFER: 'DEFER',
66
+
67
+ // Generators
68
+ YIELD: 'YIELD',
69
+
70
+ // Extern
71
+ EXTERN: 'EXTERN',
72
+
73
+ // Full-stack keywords
74
+ SERVER: 'SERVER',
75
+ CLIENT: 'CLIENT',
76
+ SHARED: 'SHARED',
77
+ ROUTE: 'ROUTE',
78
+ STATE: 'STATE',
79
+ COMPUTED: 'COMPUTED',
80
+ EFFECT: 'EFFECT',
81
+ COMPONENT: 'COMPONENT',
82
+ STORE: 'STORE',
83
+ STYLE_BLOCK: 'STYLE_BLOCK',
84
+
85
+ // HTTP methods (used in route declarations)
86
+ GET: 'GET',
87
+ POST: 'POST',
88
+ PUT: 'PUT',
89
+ DELETE: 'DELETE',
90
+ PATCH: 'PATCH',
91
+
92
+ // Operators
93
+ PLUS: 'PLUS', // +
94
+ MINUS: 'MINUS', // -
95
+ STAR: 'STAR', // *
96
+ SLASH: 'SLASH', // /
97
+ PERCENT: 'PERCENT', // %
98
+ POWER: 'POWER', // **
99
+ ASSIGN: 'ASSIGN', // =
100
+ EQUAL: 'EQUAL', // ==
101
+ NOT_EQUAL: 'NOT_EQUAL', // !=
102
+ LESS: 'LESS', // <
103
+ LESS_EQUAL: 'LESS_EQUAL', // <=
104
+ GREATER: 'GREATER', // >
105
+ GREATER_EQUAL: 'GREATER_EQUAL', // >=
106
+ AND_AND: 'AND_AND', // &&
107
+ OR_OR: 'OR_OR', // ||
108
+ BANG: 'BANG', // !
109
+ PIPE: 'PIPE', // |>
110
+ ARROW: 'ARROW', // =>
111
+ THIN_ARROW: 'THIN_ARROW', // ->
112
+ DOT: 'DOT', // .
113
+ DOT_DOT: 'DOT_DOT', // ..
114
+ DOT_DOT_EQUAL: 'DOT_DOT_EQUAL', // ..=
115
+ SPREAD: 'SPREAD', // ...
116
+ COLON: 'COLON', // :
117
+ DOUBLE_COLON: 'DOUBLE_COLON', // ::
118
+ QUESTION: 'QUESTION', // ?
119
+ QUESTION_DOT: 'QUESTION_DOT', // ?.
120
+ QUESTION_QUESTION: 'QUESTION_QUESTION', // ??
121
+ PLUS_ASSIGN: 'PLUS_ASSIGN', // +=
122
+ MINUS_ASSIGN: 'MINUS_ASSIGN', // -=
123
+ STAR_ASSIGN: 'STAR_ASSIGN', // *=
124
+ SLASH_ASSIGN: 'SLASH_ASSIGN', // /=
125
+
126
+ // Delimiters
127
+ LPAREN: 'LPAREN', // (
128
+ RPAREN: 'RPAREN', // )
129
+ LBRACE: 'LBRACE', // {
130
+ RBRACE: 'RBRACE', // }
131
+ LBRACKET: 'LBRACKET', // [
132
+ RBRACKET: 'RBRACKET', // ]
133
+ COMMA: 'COMMA', // ,
134
+ SEMICOLON: 'SEMICOLON', // ;
135
+ NEWLINE: 'NEWLINE', // \n (significant in some contexts)
136
+
137
+ // JSX
138
+ JSX_OPEN: 'JSX_OPEN', // <tag
139
+ JSX_CLOSE: 'JSX_CLOSE', // </tag>
140
+ JSX_SELF_CLOSE: 'JSX_SELF_CLOSE', // />
141
+ JSX_TEXT: 'JSX_TEXT',
142
+
143
+ // Regex
144
+ REGEX: 'REGEX', // /pattern/flags
145
+
146
+ // Special
147
+ EOF: 'EOF',
148
+ DOCSTRING: 'DOCSTRING', // /// comment
149
+ };
150
+
151
+ // Keywords map for quick lookup during lexing
152
+ export const Keywords = {
153
+ 'var': TokenType.VAR,
154
+ 'let': TokenType.LET,
155
+ 'fn': TokenType.FN,
156
+ 'return': TokenType.RETURN,
157
+ 'if': TokenType.IF,
158
+ 'elif': TokenType.ELIF,
159
+ 'else': TokenType.ELSE,
160
+ 'for': TokenType.FOR,
161
+ 'while': TokenType.WHILE,
162
+ 'match': TokenType.MATCH,
163
+ 'type': TokenType.TYPE,
164
+ 'import': TokenType.IMPORT,
165
+ 'from': TokenType.FROM,
166
+ 'export': TokenType.EXPORT,
167
+ 'as': TokenType.AS,
168
+ 'and': TokenType.AND,
169
+ 'or': TokenType.OR,
170
+ 'not': TokenType.NOT,
171
+ 'in': TokenType.IN,
172
+ 'true': TokenType.TRUE,
173
+ 'false': TokenType.FALSE,
174
+ 'nil': TokenType.NIL,
175
+ 'break': TokenType.BREAK,
176
+ 'continue': TokenType.CONTINUE,
177
+ 'try': TokenType.TRY,
178
+ 'catch': TokenType.CATCH,
179
+ 'finally': TokenType.FINALLY,
180
+ 'async': TokenType.ASYNC,
181
+ 'await': TokenType.AWAIT,
182
+ 'guard': TokenType.GUARD,
183
+ 'interface': TokenType.INTERFACE,
184
+ 'derive': TokenType.DERIVE,
185
+ 'pub': TokenType.PUB,
186
+ 'impl': TokenType.IMPL,
187
+ 'trait': TokenType.TRAIT,
188
+ 'defer': TokenType.DEFER,
189
+ 'yield': TokenType.YIELD,
190
+ 'extern': TokenType.EXTERN,
191
+ 'server': TokenType.SERVER,
192
+ 'client': TokenType.CLIENT,
193
+ 'shared': TokenType.SHARED,
194
+ 'route': TokenType.ROUTE,
195
+ 'state': TokenType.STATE,
196
+ 'computed': TokenType.COMPUTED,
197
+ 'effect': TokenType.EFFECT,
198
+ 'component': TokenType.COMPONENT,
199
+ 'store': TokenType.STORE,
200
+ };
201
+
202
+ // Token class
203
+ export class Token {
204
+ constructor(type, value, line, column) {
205
+ this.type = type;
206
+ this.value = value;
207
+ this.line = line;
208
+ this.column = column;
209
+ }
210
+
211
+ toString() {
212
+ return `Token(${this.type}, ${JSON.stringify(this.value)}, ${this.line}:${this.column})`;
213
+ }
214
+ }