JSFiddle - React, Tailwind, and code Playground
by xavierm02
JavaScript
[
{
name: 'Digit',
rules: Or(
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9'
)
},
{
name: 'Number',
rules: Repeat( Rule( 'Digit' ), '+' ).setAction( function( ) {
return [].slice.call(arguments).join('');
} )
},
{
name: 'Expression',
start: true,
rules: Or(
Rule( 'AdditiveExpression' )
)
},
{
name: 'AdditiveExpression',
rules: Or(
And(
Rule( 'MultiplicativeExpression' ).setLabel( 'left' ),
Or(
'+',
'-'
).setLabel( 'operator' ),
Rule( 'AdditiveExpression' ).setLabel( 'right' )
).setAction( function ( ) {
var left = +this.left;
var right = +this.right;
var result = ( this.operator === '+' ) ? left + right : left - right;
return result + '';
} ),
Rule( 'MultiplicativeExpression' )
)
},
{
name: 'MultiplicativeExpression',
rules: Or(
And(
Rule( 'UnaryExpression' ).setLabel( 'left' ),
Or(
'*',
'/'
).setLabel( 'operator' ),
Rule( 'MultiplicativeExpression' ).setLabel( 'right' )
).setAction( function ( ) {
var left = +this.left;
var right = +this.right;
var result = ( this.operator === '*' ) ? left * right : left / right;
return...