public bool TryParse(Tokens tokens, IScope scope, out IStatement statement) { tokens.SetMark (); Expression value = _expressionParser.ParseValue ( scope, tokens ); // Look ahead to see if this is an assignment if ( value is Variable && tokens.PullTokenIfEqual ( "=" ) ) { Assign assign = new Assign ( _executorFactory.GetAssignExecutor() ); assign.Ident = value as Variable; Expression expression = _expressionParser.ParseExpression ( scope, tokens ); assign.Expr = expression; statement = assign; return true; } // Failed to parse as assignment, rollback. tokens.RollbackToMark (); statement = null; return false; }
private ArithOp ParseOperator( Tokens tokens ) { if ( tokens.PullTokenIfEqual ( "+" ) ) { return ArithOp.Add; } else if ( tokens.PullTokenIfEqual ( "-" ) ) { return ArithOp.Sub; } else if ( tokens.PullTokenIfEqual ( "*" ) ) { return ArithOp.Mul; } else if ( tokens.PullTokenIfEqual ( "/" ) ) { return ArithOp.Div; } else if ( tokens.PullTokenIfEqual ( "==" ) ) { return ArithOp.Equality; } else if ( tokens.PullTokenIfEqual ( "<" ) ) { return ArithOp.LessThan; } else if ( tokens.PullTokenIfEqual ( ">" ) ) { return ArithOp.GreaterThan; } return ArithOp.none; }