Fixed parsing of variable names with numbers and stacked dice rolls like dd8-> 1d(1d8)
This commit is contained in:
@@ -24,15 +24,16 @@ function id(x) { return x[0]; }
|
|||||||
value: s => s.slice(1, -1),
|
value: s => s.slice(1, -1),
|
||||||
},
|
},
|
||||||
name: {
|
name: {
|
||||||
match: /[a-zA-Z_]+/,
|
match: /[a-zA-Z_]*[a-ce-zA-Z_][a-zA-Z0-9_]*/,
|
||||||
type: moo.keywords({
|
type: moo.keywords({
|
||||||
'keywords': ['d', 'true', 'false'],
|
'keywords': ['true', 'false'],
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
space: {
|
space: {
|
||||||
match: /\s+/,
|
match: /\s+/,
|
||||||
lineBreaks: true,
|
lineBreaks: true,
|
||||||
},
|
},
|
||||||
|
diceOperator: ['d'],
|
||||||
separator: [',', ';'],
|
separator: [',', ';'],
|
||||||
period: ['.'],
|
period: ['.'],
|
||||||
ifOperator: ['?'],
|
ifOperator: ['?'],
|
||||||
@@ -78,9 +79,9 @@ let ParserRules = [
|
|||||||
{"name": "additiveExpression", "symbols": ["multiplicativeExpression"], "postprocess": id},
|
{"name": "additiveExpression", "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", "_", {"literal":"d"}, "_", "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]})},
|
||||||
{"name": "rollExpression", "symbols": ["singleRollExpression"], "postprocess": id},
|
{"name": "rollExpression", "symbols": ["singleRollExpression"], "postprocess": id},
|
||||||
{"name": "singleRollExpression", "symbols": [{"literal":"d"}, "_", "exponentExpression"], "postprocess": d => new RollNode({left: new ConstantNode({value: 1, type: 'number'}), right: d[2]})},
|
{"name": "singleRollExpression", "symbols": [{"literal":"d"}, "_", "singleRollExpression"], "postprocess": d => new RollNode({left: new ConstantNode({value: 1, type: 'number'}), right: d[2]})},
|
||||||
{"name": "singleRollExpression", "symbols": ["exponentExpression"], "postprocess": id},
|
{"name": "singleRollExpression", "symbols": ["exponentExpression"], "postprocess": id},
|
||||||
{"name": "exponentExpression", "symbols": ["callExpression", "_", (lexer.has("exponentOperator") ? {type: "exponentOperator"} : exponentOperator), "_", "exponentExpression"], "postprocess": d => operator(d, 'exponent')},
|
{"name": "exponentExpression", "symbols": ["callExpression", "_", (lexer.has("exponentOperator") ? {type: "exponentOperator"} : exponentOperator), "_", "exponentExpression"], "postprocess": d => operator(d, 'exponent')},
|
||||||
{"name": "exponentExpression", "symbols": ["unaryExpression"], "postprocess": id},
|
{"name": "exponentExpression", "symbols": ["unaryExpression"], "postprocess": id},
|
||||||
|
|||||||
@@ -22,15 +22,16 @@
|
|||||||
value: s => s.slice(1, -1),
|
value: s => s.slice(1, -1),
|
||||||
},
|
},
|
||||||
name: {
|
name: {
|
||||||
match: /[a-zA-Z_]+/,
|
match: /[a-zA-Z_]*[a-ce-zA-Z_][a-zA-Z0-9_]*/,
|
||||||
type: moo.keywords({
|
type: moo.keywords({
|
||||||
'keywords': ['d', 'true', 'false'],
|
'keywords': ['true', 'false'],
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
space: {
|
space: {
|
||||||
match: /\s+/,
|
match: /\s+/,
|
||||||
lineBreaks: true,
|
lineBreaks: true,
|
||||||
},
|
},
|
||||||
|
diceOperator: ['d'],
|
||||||
separator: [',', ';'],
|
separator: [',', ';'],
|
||||||
period: ['.'],
|
period: ['.'],
|
||||||
ifOperator: ['?'],
|
ifOperator: ['?'],
|
||||||
@@ -98,11 +99,11 @@ multiplicativeExpression ->
|
|||||||
| rollExpression {% id %}
|
| rollExpression {% id %}
|
||||||
|
|
||||||
rollExpression ->
|
rollExpression ->
|
||||||
rollExpression _ "d" _ exponentExpression {% d => new RollNode({left: d[0], right: d[4]}) %}
|
rollExpression _ %diceOperator _ exponentExpression {% d => new RollNode({left: d[0], right: d[4]}) %}
|
||||||
| singleRollExpression {% id %}
|
| singleRollExpression {% id %}
|
||||||
|
|
||||||
singleRollExpression ->
|
singleRollExpression ->
|
||||||
"d" _ exponentExpression {% d => new RollNode({left: new ConstantNode({value: 1, type: 'number'}), right: d[2]}) %}
|
"d" _ singleRollExpression {% d => new RollNode({left: new ConstantNode({value: 1, type: 'number'}), right: d[2]}) %}
|
||||||
| exponentExpression {% id %}
|
| exponentExpression {% id %}
|
||||||
|
|
||||||
exponentExpression ->
|
exponentExpression ->
|
||||||
|
|||||||
Reference in New Issue
Block a user