-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
executable file
·38 lines (35 loc) · 993 Bytes
/
index.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
33
34
35
36
37
38
const Tokenizer = require('./tokenizer')
const Parser = require('./parser')
const { Interpreter, LoxClass, LoxInstance } = require('./interpreter')
const Environment = require('./environment')
const run = (code, environment, printfn, debug = false) => {
const tokenizer = new Tokenizer(code)
const tokens = tokenizer.scanTokens()
if (debug) console.log(tokens)
const parser = new Parser(tokens)
const statements = parser.parse()
if (debug) console.log(statements)
const interpreter = new Interpreter(environment, printfn)
let lastStatement
for (let statement of statements) {
lastStatement = interpreter.interpret(statement)
}
return lastStatement
}
const parse = code => {
const tokenizer = new Tokenizer(code)
const tokens = tokenizer.scanTokens()
const parser = new Parser(tokens)
const statements = parser.parse()
return statements
}
module.exports = {
run,
parse,
Parser,
LoxClass,
Tokenizer,
LoxInstance,
Interpreter,
Environment
}