Skip to content

Commit b5e20dc

Browse files
refactor: parser (#86)
1 parent b91c6e9 commit b5e20dc

File tree

3 files changed

+20
-20
lines changed

3 files changed

+20
-20
lines changed

src/lib/reducer.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ function isValueType(type) {
2828
case 'VminValue':
2929
case 'VmaxValue':
3030
case 'PercentageValue':
31-
case 'Value':
31+
case 'Number':
3232
return true;
3333
}
3434
return false;
@@ -236,7 +236,7 @@ function reduceDivisionExpression(node) {
236236
return node;
237237
}
238238

239-
if (node.right.type !== 'Value') {
239+
if (node.right.type !== 'Number') {
240240
throw new Error(`Cannot divide by "${node.right.unit}", number expected`);
241241
}
242242

@@ -253,8 +253,8 @@ function reduceDivisionExpression(node) {
253253
}
254254

255255
function reduceMultiplicationExpression(node) {
256-
// (expr) * value
257-
if (node.left.type === 'MathExpression' && node.right.type === 'Value') {
256+
// (expr) * number
257+
if (node.left.type === 'MathExpression' && node.right.type === 'Number') {
258258
if (
259259
isValueType(node.left.left.type) &&
260260
isValueType(node.left.right.type)
@@ -264,13 +264,13 @@ function reduceMultiplicationExpression(node) {
264264
return node.left;
265265
}
266266
}
267-
// something * value
268-
else if (isValueType(node.left.type) && node.right.type === 'Value') {
267+
// something * number
268+
else if (isValueType(node.left.type) && node.right.type === 'Number') {
269269
node.left.value *= node.right.value;
270270
return node.left;
271271
}
272-
// value * (expr)
273-
else if (node.left.type === 'Value' && node.right.type === 'MathExpression') {
272+
// number * (expr)
273+
else if (node.left.type === 'Number' && node.right.type === 'MathExpression') {
274274
if (
275275
isValueType(node.right.left.type) &&
276276
isValueType(node.right.right.type)
@@ -280,8 +280,8 @@ function reduceMultiplicationExpression(node) {
280280
return node.right;
281281
}
282282
}
283-
// value * something
284-
else if (node.left.type === 'Value' && isValueType(node.right.type)) {
283+
// number * something
284+
else if (node.left.type === 'Number' && isValueType(node.right.type)) {
285285
node.right.value *= node.left.value;
286286
return node.right;
287287
}

src/lib/stringifier.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function stringify(node, prec) {
3535

3636
return str;
3737
}
38-
case "Value":
38+
case 'Number':
3939
return round(node.value, prec);
4040
case 'Function':
4141
return node.value;

src/parser.jison

+9-9
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,15 @@ expression
7676
| math_expression DIV math_expression { $$ = { type: 'MathExpression', operator: $2, left: $1, right: $3 }; }
7777
| LPAREN math_expression RPAREN { $$ = $2; }
7878
| function { $$ = $1; }
79-
| css_value { $$ = $1; }
80-
| value { $$ = $1; }
79+
| dimension { $$ = $1; }
80+
| number { $$ = $1; }
8181
;
8282

8383
function
8484
: FUNCTION { $$ = { type: 'Function', value: $1 }; }
8585
;
8686

87-
css_value
87+
dimension
8888
: LENGTH { $$ = { type: 'LengthValue', value: parseFloat($1), unit: /[a-z]+$/i.exec($1)[0] }; }
8989
| ANGLE { $$ = { type: 'AngleValue', value: parseFloat($1), unit: /[a-z]+$/i.exec($1)[0] }; }
9090
| TIME { $$ = { type: 'TimeValue', value: parseFloat($1), unit: /[a-z]+$/i.exec($1)[0] }; }
@@ -100,12 +100,12 @@ expression
100100
| VMINS { $$ = { type: 'VminValue', value: parseFloat($1), unit: 'vmin' }; }
101101
| VMAXS { $$ = { type: 'VmaxValue', value: parseFloat($1), unit: 'vmax' }; }
102102
| PERCENTAGE { $$ = { type: 'PercentageValue', value: parseFloat($1), unit: '%' }; }
103-
| ADD css_value { var prev = $2; $$ = prev; }
104-
| SUB css_value { var prev = $2; prev.value *= -1; $$ = prev; }
103+
| ADD dimension { var prev = $2; $$ = prev; }
104+
| SUB dimension { var prev = $2; prev.value *= -1; $$ = prev; }
105105
;
106106

107-
value
108-
: NUMBER { $$ = { type: 'Value', value: parseFloat($1) }; }
109-
| ADD NUMBER { $$ = { type: 'Value', value: parseFloat($2) }; }
110-
| SUB NUMBER { $$ = { type: 'Value', value: parseFloat($2) * -1 }; }
107+
number
108+
: NUMBER { $$ = { type: 'Number', value: parseFloat($1) }; }
109+
| ADD NUMBER { $$ = { type: 'Number', value: parseFloat($2) }; }
110+
| SUB NUMBER { $$ = { type: 'Number', value: parseFloat($2) * -1 }; }
111111
;

0 commit comments

Comments
 (0)