forked from AhmedHani/latexCalculator
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlatexParser.pegjs
55 lines (45 loc) · 1.29 KB
/
latexParser.pegjs
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
start =
additive
additive =
left:subtractive "+" right:additive
{ return left+right; }
/ subtractive
subtractive =
left:multiplicative "-" right:subtractive
{ return left-right; }
/ multiplicative
multiplicative =
left:frac "\\cdot" right:multiplicative
{ return left*right; }
/ frac
frac
= "\\frac{" nominator:additive "}{" denominator:additive "}"
{
if (denominator === 0) {
if (nominator < 0) {
return Number.POSITIVE_INFINITY;
} else {
return Number.NEGATIVE_INFINITY;
}
} else {
return nominator / denominator;
}
}
/ power
power
= left:primary "^" right:power { return Math.pow(left, right); }
/ left:primary "^" "{" right:additive "}" { return Math.pow(left, right); }
/ primary
primary =
float
/ "(" additive:additive ")"
{ return additive; }
float "float"
= left:[0-9]+ "." right:[0-9]+ { return parseFloat(left.join("") + "." + right.join("")); }
/ "-" left:[0-9]+ "." right:[0-9]+ { return parseFloat("-" + left.join("") + "." + right.join("")); }
/ integer
integer =
digits:[0-9]+
{ return parseInt(digits.join(""), 10); }
/ "-" digits:[0-9]+
{ return parseInt("-" + digits.join(""), 10); }