-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommon.lua
More file actions
94 lines (45 loc) · 1.59 KB
/
common.lua
File metadata and controls
94 lines (45 loc) · 1.59 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
90
91
92
93
94
local common = { Position = {}, Problem = {}, ParseAccept = {}, ParseReject = {}, ParseFail = {} }
function common.Position.new(index, line, col)
local self = setmetatable({}, { __index = common.Position })
self.index = index
self.line = line
self.col = col
return self
end
function common.Position:advance(offset)
return common.Position.new(self.index + offset, self.line, self.col + offset)
end
function common.Position:toGlobalPosition(parentPosition)
local index = parentPosition.index + self.index - 1
local line = parentPosition.line + self.line - 1
local onSameLine = self.line == 1
local col = onSameLine and (parentPosition.col + self.col - 1) or self.col
return common.Position.new(index, line, col)
end
function common.Problem.new(message, position)
local self = setmetatable({}, { __index = common.Problem })
self.message = message
self.position = position
return self
end
function common.ParseAccept.new(result, nextIndex, warnings, strictProblems)
local self = setmetatable({}, { __index = common.ParseAccept })
self.kind = "ParseAccept"
self.result = result
self.nextIndex = nextIndex
self.warnings = warnings
self.strictProblems = strictProblems
return self
end
function common.ParseReject.new()
local self = setmetatable({}, { __index = common.ParseReject })
self.kind = "ParseReject"
return self
end
function common.ParseFail.new(failure)
local self = setmetatable({}, { __index = common.ParseFail })
self.kind = "ParseFail"
self.failure = failure
return self
end
return common