JSFiddle - React, Tailwind, and code Playground
by XTREME104
JavaScript
function lex (input) {
var lines = input.split(/[;\{\}]/);
var tokens = [];
function charAt (line, char) {
return lines[line].charAt(char);
}
for (var i = 0; i < lines.length; i++) {
for (var j = 0; j < lines[i].length; j++) {
console.log(charAt(i, j));
if (charAt(i, j).search(/[a-zA-Z]/) == 0) {
var identifier = { type: "identifier", name: charAt(i, j) };
for (var k = j + 1; k < lines[i].length; k++) {
if (charAt(i, k).search(/[a-zA-Z0-9\.]/) == 0) {
identifier.name += charAt(i, k);
} else {
k = lines[i].length;
}
}
j = k;
tokens.push(identifier);
} else if (charAt(i, j).search(/[0-9\.]/) == 0) {
var number = { type: "number", value: charAt(i, j) };
for (var k = j + 1; k < lines[i].length; k++) {
if (charAt(i, k).search(/[0-9\.]/) == 0) {
number.value += charAt(i, k);
} else {
j = k;
k = lines[i].length;
console.log(j);
}
}
tokens.push(number);
} else if (charAt(i, j) == "=" && charAt(i, j + 1) == "=" && charAt(i, j + 2) == "=") {
tokens.push({ type: "strictEquality" });
j += 2;
} else if (charAt(i, j) == "=" && charAt(i, j + 1) == "=") {
tokens.push({ type: "equality" });
j++;
} else if (charAt(i, j) == "=") {
tokens.push({ type: "assignment" });
}
}
}
return tokens;
}
console.log(lex("hi;it;92=5"));