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.push( newTokens );
j += newTokens.join( '' ).length;
...