Added modulo operator
This commit is contained in:
@@ -41,6 +41,7 @@ function id(x) { return x[0]; }
|
|||||||
multiplicativeOperator: ['*', '/'],
|
multiplicativeOperator: ['*', '/'],
|
||||||
exponentOperator: ['^'],
|
exponentOperator: ['^'],
|
||||||
additiveOperator: ['+', '-'],
|
additiveOperator: ['+', '-'],
|
||||||
|
moduloOperator: ['%'],
|
||||||
andOperator: ['&', '&&'],
|
andOperator: ['&', '&&'],
|
||||||
orOperator: ['|', '||'],
|
orOperator: ['|', '||'],
|
||||||
stringDelimiters: ['\"', '\''],
|
stringDelimiters: ['\"', '\''],
|
||||||
@@ -75,8 +76,10 @@ let ParserRules = [
|
|||||||
{"name": "equalityExpression", "symbols": ["relationalExpression"], "postprocess": id},
|
{"name": "equalityExpression", "symbols": ["relationalExpression"], "postprocess": id},
|
||||||
{"name": "relationalExpression", "symbols": ["relationalExpression", "_", (lexer.has("relationalOperator") ? {type: "relationalOperator"} : relationalOperator), "_", "additiveExpression"], "postprocess": d => operator(d, 'relation')},
|
{"name": "relationalExpression", "symbols": ["relationalExpression", "_", (lexer.has("relationalOperator") ? {type: "relationalOperator"} : relationalOperator), "_", "additiveExpression"], "postprocess": d => operator(d, 'relation')},
|
||||||
{"name": "relationalExpression", "symbols": ["additiveExpression"], "postprocess": id},
|
{"name": "relationalExpression", "symbols": ["additiveExpression"], "postprocess": id},
|
||||||
{"name": "additiveExpression", "symbols": ["additiveExpression", "_", (lexer.has("additiveOperator") ? {type: "additiveOperator"} : additiveOperator), "_", "multiplicativeExpression"], "postprocess": d => operator(d, 'add')},
|
{"name": "additiveExpression", "symbols": ["additiveExpression", "_", (lexer.has("additiveOperator") ? {type: "additiveOperator"} : additiveOperator), "_", "remainderExpression"], "postprocess": d => operator(d, 'add')},
|
||||||
{"name": "additiveExpression", "symbols": ["multiplicativeExpression"], "postprocess": id},
|
{"name": "additiveExpression", "symbols": ["remainderExpression"], "postprocess": id},
|
||||||
|
{"name": "remainderExpression", "symbols": ["remainderExpression", "_", (lexer.has("moduloOperator") ? {type: "moduloOperator"} : moduloOperator), "_", "multiplicativeExpression"], "postprocess": d => operator(d, 'remainder')},
|
||||||
|
{"name": "remainderExpression", "symbols": ["multiplicativeExpression"], "postprocess": id},
|
||||||
{"name": "multiplicativeExpression", "symbols": ["multiplicativeExpression", "_", (lexer.has("multiplicativeOperator") ? {type: "multiplicativeOperator"} : multiplicativeOperator), "_", "rollExpression"], "postprocess": d => operator(d, 'multiply')},
|
{"name": "multiplicativeExpression", "symbols": ["multiplicativeExpression", "_", (lexer.has("multiplicativeOperator") ? {type: "multiplicativeOperator"} : multiplicativeOperator), "_", "rollExpression"], "postprocess": d => operator(d, 'multiply')},
|
||||||
{"name": "multiplicativeExpression", "symbols": ["rollExpression"], "postprocess": id},
|
{"name": "multiplicativeExpression", "symbols": ["rollExpression"], "postprocess": id},
|
||||||
{"name": "rollExpression", "symbols": ["rollExpression", "_", (lexer.has("diceOperator") ? {type: "diceOperator"} : diceOperator), "_", "exponentExpression"], "postprocess": d => new RollNode({left: d[0], right: d[4]})},
|
{"name": "rollExpression", "symbols": ["rollExpression", "_", (lexer.has("diceOperator") ? {type: "diceOperator"} : diceOperator), "_", "exponentExpression"], "postprocess": d => new RollNode({left: d[0], right: d[4]})},
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
multiplicativeOperator: ['*', '/'],
|
multiplicativeOperator: ['*', '/'],
|
||||||
exponentOperator: ['^'],
|
exponentOperator: ['^'],
|
||||||
additiveOperator: ['+', '-'],
|
additiveOperator: ['+', '-'],
|
||||||
|
moduloOperator: ['%'],
|
||||||
andOperator: ['&', '&&'],
|
andOperator: ['&', '&&'],
|
||||||
orOperator: ['|', '||'],
|
orOperator: ['|', '||'],
|
||||||
stringDelimiters: ['\"', '\''],
|
stringDelimiters: ['\"', '\''],
|
||||||
@@ -91,7 +92,11 @@ relationalExpression ->
|
|||||||
| additiveExpression {% id %}
|
| additiveExpression {% id %}
|
||||||
|
|
||||||
additiveExpression ->
|
additiveExpression ->
|
||||||
additiveExpression _ %additiveOperator _ multiplicativeExpression {% d => operator(d, 'add') %}
|
additiveExpression _ %additiveOperator _ remainderExpression {% d => operator(d, 'add') %}
|
||||||
|
| remainderExpression {% id %}
|
||||||
|
|
||||||
|
remainderExpression ->
|
||||||
|
remainderExpression _ %moduloOperator _ multiplicativeExpression {% d => operator(d, 'remainder') %}
|
||||||
| multiplicativeExpression {% id %}
|
| multiplicativeExpression {% id %}
|
||||||
|
|
||||||
multiplicativeExpression ->
|
multiplicativeExpression ->
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ export default class OperatorNode extends ParseNode {
|
|||||||
case '*': result = left * right; break;
|
case '*': result = left * right; break;
|
||||||
case '/': result = left / right; break;
|
case '/': result = left / right; break;
|
||||||
case '^': result = Math.pow(left, right); break;
|
case '^': result = Math.pow(left, right); break;
|
||||||
|
case '%': result = left % right; break;
|
||||||
case '&':
|
case '&':
|
||||||
case '&&': result = left && right; break;
|
case '&&': result = left && right; break;
|
||||||
case '|':
|
case '|':
|
||||||
|
|||||||
Reference in New Issue
Block a user