-
Notifications
You must be signed in to change notification settings - Fork 0
/
builtInTerminals.ts
70 lines (69 loc) · 2.35 KB
/
builtInTerminals.ts
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
const builtInTerminals = {
'newline': {
parseFn: `function parseTerminal_newline (parameters: string[]) {
if (source[index + scout] === \`\\n\`) {
scout++;
return node(\`newline\`, \`\\n\`, []);
}
return false;
}`
},
'eof': {
parseFn: `function parseTerminal_eof (parameters: string[]) {
if (index === source.length) {
return node(\`eof\`, null, []);
}
return false;
}`
},
'space': {
parseFn: `function parseTerminal_space (parameters: string[]) {
if (source[index + scout] === \` \`) {
scout++;
return node(\`space\`, \` \`, []);
}
return false;
}`
},
'whitespace': {
parseFn: `function parseTerminal_whitespace (parameters: string[], alias: string) {
console.log(\`parseTerminal_whitespace; parameters=\`);
console.log(parameters);
let i, epsilon;
for (i = 0; index + scout + i < source.length; i++) {
if (source[index + scout + i] === \` \` || source[index + scout + i] === \`\\t\` || source[index + scout + i] === \`\\n\`) {
// let loop continue
} else {
break;
}
}
scout += i;
return node(\`whitespace\`, source.slice(index + scout - i, index + scout), []);
}`
},
'empty': {
parseFn: `function parseTerminal_empty (parameters: string[], alias: string) { return node (\`empty\`, \`\`, []);}\n`
},
'alpha': {
parseFn: `function parseTerminal_alpha (parameters: string[], alias: string) {
let i;
for (i = 0; index + scout + i < source.length; i++) {
if (/[a-zA-Z]/.test(source[index + scout + i])) {
// let loop continue
} else {
break;
}
}
if (i === 0) {
return false;
}
scout += i;
return node(\`alpha\`, source.slice(index + scout - i, index + scout), [], {
isEntry: false,
isAbstract: false,
alias: \`\${alias}\`
});
}`
}
};
export default builtInTerminals;