Skip to content

Commit 6d2ed60

Browse files
committed
✨ Added fraction
1 parent a0c1772 commit 6d2ed60

File tree

6 files changed

+23
-4
lines changed

6 files changed

+23
-4
lines changed

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"editor.tabCompletion": "on"
3+
}

dist/index.es.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4384,6 +4384,10 @@ parse$1.numericLiteral = (sourceString) => {
43844384
const n = Number(sourceString.replace("%", ""));
43854385
return round(n * 0.01);
43864386
}
4387+
if (sourceString.includes("/")) {
4388+
const [numer, denom] = sourceString.split("/");
4389+
return numer / denom;
4390+
}
43874391
return Number(sourceString);
43884392
};
43894393
parse$1.literal = (node = {}) => {
@@ -4608,11 +4612,12 @@ var grammar = `mationGrammar {
46084612
signedInteger = "+" decimalDigit* -- positive
46094613
| "-" decimalDigit* -- negative
46104614
| decimalDigit+ -- noSign
4615+
naturalNum = nonZeroDigit decimalDigit*
46114616
46124617
// Note that the ordering of hexNum and decimalNum is reversed w.r.t. the spec
46134618
// This is intentional: the order decimalNum | hexNum will parse
46144619
// "0x..." as a decimal literal "0" followed by "x..."
4615-
numericLiteral = "-"? (percentNum | octalNum | hexNum | decimalNum)
4620+
numericLiteral = "-"? (fraction | percentNum | octalNum | hexNum | decimalNum)
46164621
decimalNum = integer "." decimalDigit* exponentPart -- bothParts
46174622
| "." decimalDigit+ exponentPart -- decimalsOnly
46184623
| integer exponentPart -- integerOnly
@@ -4621,6 +4626,7 @@ var grammar = `mationGrammar {
46214626
hexNum = "0x" hexDigit+
46224627
| "0X" hexDigit+
46234628
percentNum = decimalNum "%"
4629+
fraction = naturalNum "/" naturalNum
46244630
// hexDigit defined in Ohm's built-in rules (otherwise: hexDigit = "0".."9" | "a".."f" | "A".."F")
46254631
octalNum = "0" octalDigit+
46264632

dist/index.umd.js

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/mationGrammar.ohm

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,12 @@ mationGrammar {
110110
signedInteger = "+" decimalDigit* -- positive
111111
| "-" decimalDigit* -- negative
112112
| decimalDigit+ -- noSign
113+
naturalNum = nonZeroDigit decimalDigit*
113114

114115
// Note that the ordering of hexNum and decimalNum is reversed w.r.t. the spec
115116
// This is intentional: the order decimalNum | hexNum will parse
116117
// "0x..." as a decimal literal "0" followed by "x..."
117-
numericLiteral = "-"? (percentNum | octalNum | hexNum | decimalNum)
118+
numericLiteral = "-"? (fraction | percentNum | octalNum | hexNum | decimalNum)
118119
decimalNum = integer "." decimalDigit* exponentPart -- bothParts
119120
| "." decimalDigit+ exponentPart -- decimalsOnly
120121
| integer exponentPart -- integerOnly
@@ -123,6 +124,7 @@ mationGrammar {
123124
hexNum = "0x" hexDigit+
124125
| "0X" hexDigit+
125126
percentNum = decimalNum "%"
127+
fraction = naturalNum "/" naturalNum
126128
// hexDigit defined in Ohm's built-in rules (otherwise: hexDigit = "0".."9" | "a".."f" | "A".."F")
127129
octalNum = "0" octalDigit+
128130

src/parser.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ parse.numericLiteral = (sourceString) => {
2222
const n = Number(sourceString.replace('%', ''))
2323
return round(n * .01)
2424
}
25+
if (sourceString.includes('/')) {
26+
const [numer, denom] = sourceString.split('/')
27+
return numer / denom
28+
}
2529
return Number(sourceString)
2630
}
2731

test/commands.test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,11 @@ test.only(`Commands - Mixed strings and values args`, () => {
7474
expect(parse(`do: [
7575
turn left -1.23 right 2;
7676
move [1] 12.3% [2] -.5% beyond:[1 2];
77+
move [1] 1/3 forward 11/111 back;
7778
]`).result)
7879
.toStrictEqual({ do: [
7980
['turn', 'left', -1.23, 'right', 2],
8081
['move', [1], .123, [2], -.005, { beyond: [1, 2] }],
82+
['move', [1], 0.3333333333333333, 'forward', 0.0990990990990991, 'back'],
8183
]})
8284
})

0 commit comments

Comments
 (0)