-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathscan.js
80 lines (65 loc) · 1.95 KB
/
scan.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
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
// # Copyright (c) 2014-2021 Feudal Code Limitada - MIT license #
"use strict"
import { expecting, unexpected } from "./helper.js"
var rat
export function init(r) {
rat = r
}
export function see() {
return rat.tokens[0]
}
export function seeEndOfBlockOrEndOfLine() {
const token = rat.tokens[0]
if (token.kind == "}") { return }
if (token.kind == ";") { return }
if (token.kind == "end-of-line") { return }
expecting(token, "'}', ';' or end of line")
}
export function seeEndOfBlockOrTrueEndOfLine() {
const token = rat.tokens[0]
if (token.kind == "}") { return }
if (token.kind == "end-of-line") { return }
expecting(token, "'}' or end of line")
}
/*
export function seeTrueEndOfLine() {
const token = rat.tokens[0]
if (token.kind == "end-of-line") { return }
expecting(token, "end of line")
}
*/
export function eat() {
// console.log(rat.tokens[0])
return rat.tokens.shift()
}
export function eatValue(val) {
const token = rat.tokens.shift()
if (token.value == val) { return token }
expecting(token, "'" + val + "'")
}
export function eatKind(kind) {
const token = rat.tokens.shift()
if (token.kind != kind) { unexpected(token) }
return token
}
export function eatString() {
const token = rat.tokens.shift()
if (token.kind != "string") { expecting(token, "string") }
return token
}
export function eatName() {
const token = rat.tokens.shift()
if (token.kind != "name") { expecting(token, "name") }
return token
}
export function eatConstOrLet() {
const token = rat.tokens.shift()
if (token.value == "let") { return token }
if (token.value == "const") { return token }
expecting(token, "'let' or 'const'")
}
export function eatTrueEndOfLine() {
const token = rat.tokens.shift()
if (token.kind == "end-of-line") { return token }
expecting(token, "end of line")
}