This repository was archived by the owner on Apr 8, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtest-tokenizer.js
More file actions
executable file
·89 lines (76 loc) · 1.96 KB
/
test-tokenizer.js
File metadata and controls
executable file
·89 lines (76 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env node
/**
* Interactive tokenizer test script
*
* Usage:
* node test-tokenizer.js
* node test-tokenizer.js "your flowscript here"
*/
const { Tokenizer } = require('./dist/tokenizer');
const { TokenType } = require('./dist/types');
// Get input from command line or use default examples
const input = process.argv[2];
if (!input) {
console.log('🧪 FlowScript Tokenizer Test\n');
console.log('Usage: node test-tokenizer.js "your flowscript here"\n');
console.log('Running example tests...\n');
runExamples();
} else {
console.log('Input:', input);
console.log('\nTokens:');
const tokens = new Tokenizer(input).tokenize();
printTokens(tokens);
}
function runExamples() {
const examples = [
{
name: 'Basic causal',
input: 'A -> B'
},
{
name: 'Tension with axis',
input: 'speed ><[velocity vs quality] quality'
},
{
name: 'State marker',
input: '[decided(rationale: "test", on: "2025-10-17")] Ship it'
},
{
name: 'Question',
input: '? What is the best approach'
},
{
name: 'Alternatives with decision',
input: `? choose approach
|| Option A
-> fast
-> risky
|| Option B
-> slow
-> safe
[decided(rationale: "safety first", on: "2025-10-17")]
Option B`
}
];
examples.forEach(example => {
console.log(`\n${'='.repeat(60)}`);
console.log(`Example: ${example.name}`);
console.log(`${'='.repeat(60)}`);
console.log('Input:');
console.log(example.input);
console.log('\nTokens:');
const tokens = new Tokenizer(example.input).tokenize();
printTokens(tokens);
});
}
function printTokens(tokens) {
// Filter out EOF for cleaner output
const filtered = tokens.filter(t => t.type !== TokenType.EOF);
console.table(filtered.map(t => ({
Type: t.type,
Value: t.value.substring(0, 40), // Truncate long values
Line: t.line,
Col: t.column
})));
console.log(`\nTotal tokens: ${filtered.length}`);
}