Skip to content

Commit 28aab9f

Browse files
author
Donald Steinert
committed
Merge pull request #184 from shift-js/feat/lexer
implements lexer handling of basic sequence methods
2 parents 9cc2a10 + a1c9f05 commit 28aab9f

File tree

2 files changed

+143
-0
lines changed

2 files changed

+143
-0
lines changed

tests/lexerTests/lexerTestsThirdMilestone.js

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4736,6 +4736,146 @@ describe('Lexer: Third Milestone', function() {
47364736

47374737
});
47384738

4739+
describe('Sequence Type Methods', function () {
4740+
4741+
it('should handle the contains method', function () {
4742+
input = String.raw `var arr = [1,2,3,4,5]
4743+
var yes = arr.contains(4)
4744+
var no = arr.contains(6)`;
4745+
output = [
4746+
{ type: "DECLARATION_KEYWORD", value: "var" },
4747+
{ type: "IDENTIFIER", value: "arr" },
4748+
{ type: "OPERATOR", value: "=" },
4749+
{ type: "ARRAY_START", value: "[" },
4750+
{ type: "NUMBER", value: "1" },
4751+
{ type: "PUNCTUATION", value: "," },
4752+
{ type: "NUMBER", value: "2" },
4753+
{ type: "PUNCTUATION", value: "," },
4754+
{ type: "NUMBER", value: "3" },
4755+
{ type: "PUNCTUATION", value: "," },
4756+
{ type: "NUMBER", value: "4" },
4757+
{ type: "PUNCTUATION", value: "," },
4758+
{ type: "NUMBER", value: "5" },
4759+
{ type: "ARRAY_END", value: "]" },
4760+
{ type: "TERMINATOR", value: "\\n"},
4761+
4762+
{ type: "DECLARATION_KEYWORD", value: "var" },
4763+
{ type: "IDENTIFIER", value: "yes" },
4764+
{ type: "OPERATOR", value: "=" },
4765+
{ type: "IDENTIFIER", value: "arr" },
4766+
{ type: "DOT_SYNTAX", value: "." },
4767+
{ type: "NATIVE_METHOD", value: "contains" },
4768+
{ type: "INVOCATION_START", value: "(" },
4769+
{ type: "NUMBER", value: "4" },
4770+
{ type: "INVOCATION_END", value: ")" },
4771+
{ type: "TERMINATOR", value: "\\n"},
4772+
4773+
{ type: "DECLARATION_KEYWORD", value: "var" },
4774+
{ type: "IDENTIFIER", value: "no" },
4775+
{ type: "OPERATOR", value: "=" },
4776+
{ type: "IDENTIFIER", value: "arr" },
4777+
{ type: "DOT_SYNTAX", value: "." },
4778+
{ type: "NATIVE_METHOD", value: "contains" },
4779+
{ type: "INVOCATION_START", value: "(" },
4780+
{ type: "NUMBER", value: "6" },
4781+
{ type: "INVOCATION_END", value: ")" },
4782+
{ type: "TERMINATOR", value: "EOF" }
4783+
];
4784+
expect(lexer(input)).to.deep.equal(output);
4785+
});
4786+
4787+
it('should handle the drop first method', function () {
4788+
input = String.raw `var arr = [1,2,3,4,5]
4789+
var lessFirst = arr.dropFirst()
4790+
var lessFirstThree = arr.dropFirst(3)`;
4791+
output = [
4792+
{ type: "DECLARATION_KEYWORD", value: "var" },
4793+
{ type: "IDENTIFIER", value: "arr" },
4794+
{ type: "OPERATOR", value: "=" },
4795+
{ type: "ARRAY_START", value: "[" },
4796+
{ type: "NUMBER", value: "1" },
4797+
{ type: "PUNCTUATION", value: "," },
4798+
{ type: "NUMBER", value: "2" },
4799+
{ type: "PUNCTUATION", value: "," },
4800+
{ type: "NUMBER", value: "3" },
4801+
{ type: "PUNCTUATION", value: "," },
4802+
{ type: "NUMBER", value: "4" },
4803+
{ type: "PUNCTUATION", value: "," },
4804+
{ type: "NUMBER", value: "5" },
4805+
{ type: "ARRAY_END", value: "]" },
4806+
{ type: "TERMINATOR", value: "\\n"},
4807+
4808+
{ type: "DECLARATION_KEYWORD", value: "var" },
4809+
{ type: "IDENTIFIER", value: "lessFirst" },
4810+
{ type: "OPERATOR", value: "=" },
4811+
{ type: "IDENTIFIER", value: "arr" },
4812+
{ type: "DOT_SYNTAX", value: "." },
4813+
{ type: "NATIVE_METHOD", value: "dropFirst" },
4814+
{ type: "INVOCATION_START", value: "(" },
4815+
{ type: "INVOCATION_END", value: ")" },
4816+
{ type: "TERMINATOR", value: "\\n"},
4817+
4818+
{ type: "DECLARATION_KEYWORD", value: "var" },
4819+
{ type: "IDENTIFIER", value: "lessFirstThree" },
4820+
{ type: "OPERATOR", value: "=" },
4821+
{ type: "IDENTIFIER", value: "arr" },
4822+
{ type: "DOT_SYNTAX", value: "." },
4823+
{ type: "NATIVE_METHOD", value: "dropFirst" },
4824+
{ type: "INVOCATION_START", value: "(" },
4825+
{ type: "NUMBER", value: "3" },
4826+
{ type: "INVOCATION_END", value: ")" },
4827+
{ type: "TERMINATOR", value: "EOF" }
4828+
];
4829+
expect(lexer(input)).to.deep.equal(output);
4830+
});
4831+
4832+
it('should handle the drop first method', function () {
4833+
input = String.raw `var arr = [1,2,3,4,5]
4834+
var lessLast = arr.dropLast()
4835+
var lessLastThree = arr.dropLast(3)`;
4836+
output = [
4837+
{ type: "DECLARATION_KEYWORD", value: "var" },
4838+
{ type: "IDENTIFIER", value: "arr" },
4839+
{ type: "OPERATOR", value: "=" },
4840+
{ type: "ARRAY_START", value: "[" },
4841+
{ type: "NUMBER", value: "1" },
4842+
{ type: "PUNCTUATION", value: "," },
4843+
{ type: "NUMBER", value: "2" },
4844+
{ type: "PUNCTUATION", value: "," },
4845+
{ type: "NUMBER", value: "3" },
4846+
{ type: "PUNCTUATION", value: "," },
4847+
{ type: "NUMBER", value: "4" },
4848+
{ type: "PUNCTUATION", value: "," },
4849+
{ type: "NUMBER", value: "5" },
4850+
{ type: "ARRAY_END", value: "]" },
4851+
{ type: "TERMINATOR", value: "\\n"},
4852+
4853+
{ type: "DECLARATION_KEYWORD", value: "var" },
4854+
{ type: "IDENTIFIER", value: "lessLast" },
4855+
{ type: "OPERATOR", value: "=" },
4856+
{ type: "IDENTIFIER", value: "arr" },
4857+
{ type: "DOT_SYNTAX", value: "." },
4858+
{ type: "NATIVE_METHOD", value: "dropLast" },
4859+
{ type: "INVOCATION_START", value: "(" },
4860+
{ type: "INVOCATION_END", value: ")" },
4861+
{ type: "TERMINATOR", value: "\\n"},
4862+
4863+
{ type: "DECLARATION_KEYWORD", value: "var" },
4864+
{ type: "IDENTIFIER", value: "lessLastThree" },
4865+
{ type: "OPERATOR", value: "=" },
4866+
{ type: "IDENTIFIER", value: "arr" },
4867+
{ type: "DOT_SYNTAX", value: "." },
4868+
{ type: "NATIVE_METHOD", value: "dropLast" },
4869+
{ type: "INVOCATION_START", value: "(" },
4870+
{ type: "NUMBER", value: "3" },
4871+
{ type: "INVOCATION_END", value: ")" },
4872+
{ type: "TERMINATOR", value: "EOF" }
4873+
];
4874+
expect(lexer(input)).to.deep.equal(output);
4875+
});
4876+
4877+
});
4878+
47394879
});
47404880

47414881
describe('Fizz Buzz Examples', function () {

transpiler/lexer/lexicalTypes.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@ module.exports = {
1414
'abs': 'NATIVE_METHOD',
1515
'advancedBy': 'NATIVE_METHOD',
1616
'append': 'NATIVE_METHOD',
17+
'contains': 'NATIVE_METHOD',
1718
'distanceTo': 'NATIVE_METHOD',
19+
'dropFirst': 'NATIVE_METHOD',
20+
'dropLast': 'NATIVE_METHOD',
1821
'hasPrefix': 'NATIVE_METHOD',
1922
'hasSuffix': 'NATIVE_METHOD',
2023
'insert': 'NATIVE_METHOD',

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy