JSFiddle - React, Tailwind, and code Playground

by xavierm02

JavaScript

var rules = ( function ( ) {
    var Digit = [ ];
    var Expression = [ ];
    var Operator = [ ];
    Digit.name = 'Digit';
    Expression.name = 'Expression';
    Operator.name = 'Operator';
    Digit.push(
        [ '0' ],
        [ '1' ],
        [ '2' ],
        [ '3' ],
        [ '4' ],
        [ '5' ],
        [ '6' ],
        [ '7' ],
        [ '8' ],
        [ '9' ]
    );
    Expression.push(
        [ '(', Expression, ')' ],
        [ Expression, Operator, Expression ],
        [ Digit ]
    );
    Operator.push(
        [ '+' ],
        [ '-' ],
        [ '*' ],
        [ '/' ]
    );
    return {
        Digit: Digit,
        Expression: Expression,
        Operator: Operator
    };
} )( );

var input = '1+(2+3)';
function readTokens( rule, i, reccursive, tab ) {console.log(tab,rule.name, reccursive)
    var tokens;
    var some = rule.some( function ( subrule ) {
        tokens = [ ];
        var j = i;
        console.log( tab );
        return subrule.every( function ( stringOrRule, i ) {console.log(tab+'--',stringOrRule.name||stringOrRule);
            if ( typeof stringOrRule === 'string' ) {
                var token = input.substring( j, j += stringOrRule.length );
                if ( token === stringOrRule ) {
                    tokens.push( token );
                    return true;
                } else {
                    return false;
                }
            } else {
                var newTokens;
                if ( stringOrRule === rule && i === 0 ) {
                    if ( reccursive ) {
                        return false;
                    } else {
                        newTokens = readTokens( stringOrRule, j, true, tab+'----' );
                    }
                } else {
                    newTokens = readTokens( stringOrRule, j, false, tab+'----' );
                }
                if ( newTokens ) {
                    tokens = tokens.concat( newTokens );
                    j += newTokens.join( ''...