-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgroup.js
More file actions
40 lines (33 loc) · 750 Bytes
/
group.js
File metadata and controls
40 lines (33 loc) · 750 Bytes
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
import {
createParser,
setParser,
regex,
seq,
rep,
alt,
ch,
end,
using
} from "../dist/parser";
let Term = createParser();
let Factor = createParser();
let Exp = createParser();
let Parser = createParser();
function group(result) {
return result.map(resultItem => {
return [resultItem.slice(0, -1)].concat(resultItem.slice(-1));
});
}
setParser(Term, alt(regex("\\d+(\\.\\d+)?"), seq(ch("("), Exp, ch(")"))));
setParser(
Factor,
using(seq(Term, rep(seq(alt(ch("*"), ch("/")), Term))), group)
);
setParser(
Exp,
using(seq(Factor, rep(seq(alt(ch("+"), ch("-")), Factor))), group)
);
setParser(Parser, seq(Exp, end()));
for (const result of Parser[0]("123+321*(456+654)")) {
console.log("RESULT :", result);
}