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