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"));