/
hello.js
32 lines (29 loc) · 1.11 KB
/
hello.js
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
const moo = require('moo')
const inspect = require('util').inspect;
const ins = (x) => console.log(inspect(x, {depth: null}));
debugger;
let lexer = moo.compile({
WS: /[ \t]+/,
comment: /\/\/.*?$/,
number: /0|[1-9][0-9]*/,
string: /"(?:\\["\\]|[^\n"\\])*"/,
lparen: '(',
rparen: ')',
keyword: ['while', 'if', 'else', 'moo', 'cow'],
NL: { match: /\n/, lineBreaks: true },
});
lexer.reset(
//123456789AB
'while (10) cow\nmoo'
)
console.log(lexer.next()) // -> { type: 'keyword', value: 'while' }
console.log(lexer.next()) // -> { type: 'WS', value: ' ' }
console.log(lexer.next()) // -> { type: 'lparen', value: '(' }
console.log(lexer.next()) // -> { type: 'number', value: '10' }
console.log(lexer.next()) // -> { type: 'rparen', value: ')' }
console.log(lexer.next()) // -> { type: 'WS', value: ' ' }
console.log(lexer.next()) // -> { type: 'NL', value: '\n'}
console.log(lexer.next()) // -> { type: 'keyword', value: 'moo' }
console.log('result='+ins(lexer.next())) // -> undefined
console.log('result='+ins(lexer.next())) // -> undefined
console.log('result='+ins(lexer.next())) // -> undefined